0Pricing
Ruby Academy · 课时

Sinatra 基础

轻量级 Web 应用

Sinatra 基础 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。

什么是 Sinatra

Sinatra 是一个轻量级 DSL,能够以最少的工作量使用 Ruby 构建网络应用。

  • 没有 Rails 那样繁重的约定
  • 直接在单个文件中定义路由
  • 非常适合小型应用、应用程序接口和原型

您只需描述 HTTP 动词和路径,然后返回响应正文。

require 'sinatra'

get '/' do
  'Hello from Sinatra!'
end

安装 Sinatra

Sinatra 是一个 gem 软件包。您可以使用 gem 命令安装它,也可以通过 Gemfile 安装。

  • gem install sinatra
  • 或者将 gem 'sinatra' 添加到 Gemfile,然后运行 bundle install

使用 ruby app.rb 运行应用,它默认会在 4567 端口提供服务。

# Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'puma'

您的第一个路由

路由将 HTTP 动词、URL 路径和一个代码块配对。代码块的返回值会成为响应正文。

  • get、post、put、delete 映射到 HTTP 方法
  • 代码块中的最后一个表达式会发送给客户端
require 'sinatra'

get '/hello' do
  'Hello, world!'
end

get '/bye' do
  'Goodbye!'
end

返回 HTML

由于返回值只是一个字符串,因此您可以直接返回原始 HTML。

  • 适合在没有模板引擎时快速创建页面
  • 对于实际应用,请优先使用 ERB 或 HAML 视图
require 'sinatra'

get '/' do
  '<h1>Welcome</h1><p>This is my Sinatra app.</p>'
end

使用纯 Ruby 为响应建模

在接入 HTTP 之前,您可以使用一个普通方法来模拟处理程序的返回值。这就是路由将调用的逻辑。

  • 请将业务逻辑放在路由代码块之外
  • 这样无需服务器即可测试代码
def greeting(name)
  "Hello, #{name}!"
end

puts greeting('Sinatra')

HTTP 动词

Sinatra 支持所有常见的 HTTP 动词作为路由方法。

  • get 读取数据
  • post 创建数据
  • put/patch 更新数据
  • delete 删除数据
require 'sinatra'

post '/users' do
  'Creating a user'
end

delete '/users/:id' do
  "Deleting user #{params['id']}"
end

设置状态码

您可以使用 status 辅助方法控制 HTTP 状态码。

  • status 404 设置为“未找到”
  • status 201 表示资源已创建
  • 默认值为 200 OK
require 'sinatra'

get '/missing' do
  status 404
  'Not found'
end

使用设置进行配置

Sinatra 使用 set、enable 和 disable 进行配置。

  • set :port, 8080 更改监听端口
  • set :bind, '0.0.0.0' 接受外部连接
  • enable :logging 启用请求日志
require 'sinatra'

set :port, 8080
set :bind, '0.0.0.0'

get '/' do
  'Configured app'
end

前置过滤器

前置过滤器会在每个匹配的请求之前运行。它非常适合执行身份验证或设置内容标头等准备工作。

  • 它与路由在同一个上下文中运行
  • 它可以读取和修改 params 及响应标头
require 'sinatra'

before do
  content_type :json
end

get '/' do
  '{"ok": true}'
end

模块化应用

对于较大的项目,请通过继承 Sinatra::Base 使用模块化风格。

  • 让多个应用彼此隔离
  • 更容易挂载到 Rack 下
  • 调用 run! 手动启动
require 'sinatra/base'

class MyApp < Sinatra::Base
  get '/' do
    'Modular Sinatra'
  end
end

MyApp.run!

在本地模拟路由器

您可以使用简单的哈希分发器模拟 Sinatra 的路由逻辑,以理解这一概念。

  • 键是路径,值是处理程序过程
  • 查找操作会返回响应正文
routes = {
  '/' => -> { 'Home' },
  '/about' => -> { 'About us' }
}

puts routes['/'].call
puts routes['/about'].call

快速检查

请测试您对 Sinatra 基础知识的理解。

回顾

您已经学会了 Sinatra 的基础知识:

  • Sinatra 是一个轻量级 Web DSL,以 gem 软件包的形式安装
  • 路由将 HTTP 动词、路径和代码块配对
  • 代码块的返回值就是响应正文
  • 使用 status、set 和 before 过滤器进行控制
  • 模块化应用继承 Sinatra::Base

接下来,您将处理动态路由和参数。

常见问题解答

「Sinatra 基础」课时是免费的吗?

是的 — 「Sinatra 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。

「Sinatra 基础」这节课中我会学到什么?

轻量级 Web 应用 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ruby Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「Sinatra 基础」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Ruby Academy 课中编写并运行代码吗?

能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Sinatra 基础
  2. 路由与参数
  3. JSON API
  4. 中间件与 Rack
← 返回 Ruby Academy