Sinatra 是一个用于创建 Web 应用的轻量级 Ruby 框架。它简单易用,非常适合快速开发小型到中型的应用程序。本章将详细介绍如何使用 Sinatra 创建 Web 应用。
安装 Sinatra
首先,你需要安装 Sinatra。这可以通过 Ruby 的包管理器 Bundler 来完成。确保你的系统上已经安装了 Ruby 和 Bundler。
创建一个新的项目目录,并进入该目录:
mkdir my_sinatra_app cd my_sinatra_app
初始化一个新的 Gemfile:
bundle init
编辑
Gemfile
文件,添加 Sinatra 作为依赖项:source 'https://rubygems.org' gem 'sinatra'
在终端中运行以下命令来安装依赖项:
bundle install
创建一个简单的 Sinatra 应用程序。在项目根目录下创建一个名为
app.rb
的文件,并添加以下代码:require 'sinatra' get '/' do "Hello, World!" end
启动应用:
ruby app.rb
访问
http://localhost:4567/
查看你的第一个 Sinatra 应用程序。
路由和请求处理
Sinatra 通过路由来处理 HTTP 请求。每个路由对应一个特定的 URL 和 HTTP 方法。你可以定义多种类型的路由,如 GET、POST、PUT 等。
GET 路由
GET 路由用于处理来自客户端的读取请求。例如:
get '/hello' do "Hello, Sinatra!" end
POST 路由
POST 路由用于处理表单提交或 API 请求。例如:
post '/submit' do "You submitted: #{params[:name]}" end
在这个例子中,params[:name]
将捕获表单中的 name
字段。
PUT 和 DELETE 路由
PUT 和 DELETE 路由分别用于更新和删除资源。例如:
put '/update/:id' do "Updating item with ID: #{params[:id]}" end delete '/delete/:id' do "Deleting item with ID: #{params[:id]}" end
动态路由
动态路由允许你在 URL 中使用变量。例如:
get '/hello/:name' do "Hello, #{params[:name]}!" end
访问 /hello/World
将返回 "Hello, World!"。
视图和模板
Sinatra 支持多种视图引擎,如 ERB、Haml、Slim 等。默认情况下,Sinatra 使用 ERB 作为视图引擎。
ERB 视图
在项目根目录下创建一个名为
views
的目录。在
views
目录中创建一个名为index.erb
的文件,内容如下:<h1>Hello, <%= @name %></h1>
修改
app.rb
文件,使其渲染这个视图:get '/' do @name = "World" erb :index end
Haml 视图
首先需要在
Gemfile
中添加 Haml 依赖:gem 'haml'
在
bundle install
安装依赖后,在views
目录中创建一个名为index.haml
的文件,内容如下:%h1 Hello, #{@name}
修改
app.rb
文件,使其渲染 Haml 视图:require 'sinatra' require 'haml' get '/' do @name = "World" haml :index end
错误处理
Sinatra 允许你自定义错误页面。你可以为不同的 HTTP 状态码定义错误处理程序。
自定义错误页面
在
views
目录中创建一个名为error.erb
的文件,内容如下:<h1>Oops! Something went wrong.</h1>
在
app.rb
文件中定义错误处理程序:-- -------------------- ---- ------- --------- -- ------ --- --- ------ --- ----- -- ------ --- --- ------ ---
这样,当发生 404 或 500 错误时,Sinatra 将渲染 error.erb
视图。
中间件
中间件允许你在请求处理过程中插入额外的功能。例如,日志记录、身份验证等。
日志记录中间件
创建一个名为
logger.rb
的文件,内容如下:require 'logger' use Rack::CommonLogger set :logger, Logger.new($stdout)
在
app.rb
文件中引用这个中间件:require './logger' get '/' do logger.info "Visited the home page" "Hello, World!" end
这样,每次访问首页时,服务器都会输出一条日志信息。
部署
部署 Sinatra 应用通常需要将其托管在一个 Web 服务器上,如 Apache 或 Nginx。此外,也可以使用像 Heroku 这样的平台即服务 (PaaS) 提供商。
使用 Heroku 部署
安装并配置 Heroku CLI 工具。
登录到 Heroku:
heroku login
创建一个新的 Heroku 应用:
heroku create my-sinatra-app
推送代码到 Heroku:
git push heroku master
打开应用:
heroku open
以上是使用 Sinatra 创建 Web 应用的基本步骤和概念。通过这些基础,你可以进一步探索更复杂的功能和特性。