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 反馈 — 无需本地设置。