配置设置

Sinatra 包含许多内置设置,用于控制是否启用某些功能。设置是应用程序级别的变量,可以使用 setenabledisable 方法进行修改,并通过 settings 对象在请求上下文中可用。应用程序可以自由设置自定义设置以及框架提供的默认内置设置。

使用 setenabledisable

在最简单的形式中,set 方法接受一个设置名称和值,并在应用程序上创建一个属性。可以通过 settings 对象在请求中访问设置。

set :foo, 'bar'

get '/foo' do
  "foo is set to " + settings.foo
end

延迟评估

当设置值为 Proc 时,每次读取设置时都会执行评估,以便可以使用其他设置来计算值。

set :foo, 'bar'
set :baz, Proc.new { "Hello " + foo }

get '/baz' do
  "baz is set to " + settings.baz
end

除非修改 foo 设置,否则 /baz 响应应为“baz 设置为 Hello bar”。

配置多个设置

可以通过将 Hash 传递给 set 来设置多个设置。前面的示例可以改写为

set :foo => 'bar', :baz => Proc.new { "Hello " + foo }

使用 enabledisable 设置多个布尔设置

enabledisable 方法是将一组设置分别设置为 truefalse 的语法糖。以下两个代码示例是等效的。

enable  :sessions, :logging
disable :dump_errors, :some_custom_option

使用 set

set :sessions, true
set :logging, true
set :dump_errors, false
set :some_custom_option, false

内置设置

:environment - 配置/部署环境

一个指定部署环境的符号;通常设置为以下之一::development:test:production:environment 默认值为 APP_ENV 环境变量的值 (ENV['APP_ENV']),当没有设置 APP_ENV 环境变量时,默认为 :development

环境可以显式设置

set :environment, :production

Sinatra 包含对签名(但未加密)的基于 cookie 的会话的支持,但默认情况下处于禁用状态。使用以下方法启用它们

set :sessions, true

会话是通过将 Rack::Session::Cookie 组件插入应用程序的中间件管道来实现的。

:logging - 将请求记录到 STDERR

启用时,将一行写入 STDERR,采用 Apache 通用日志格式。此设置在经典风格的应用程序中默认启用,在 Sinatra::Base 子类中默认禁用。

在内部,Rack::CommonLogger 组件用于生成日志消息。

:method_override - 启用/禁用 POST _method 技巧

布尔值,指定是否应启用 HTTP POST _method 参数技巧。当为 true 时,实际的 HTTP 请求方法将被 POST 主体中包含的 _method 参数的值覆盖。 _method 技巧用于使 POST 请求看起来像其他请求方法(例如,PUTDELETE),并且通常仅在不支持全部 HTTP 方法的糟糕环境(如 HTML 表单提交)中需要。

POST _method 技巧是通过将 Rack::MethodOverride 组件插入中间件管道来实现的。

:root - 应用程序的根目录

用作应用程序基础的目录。默认情况下,假设这是包含主应用程序文件 (:app_file 设置) 的目录。根目录用于构建默认的 :public_folder:views 设置。一个常见的习惯用法是在主应用程序文件中显式设置 :root 设置,如下所示

set :root, File.dirname(__FILE__)

:static - 启用/禁用静态文件路由

布尔值,用于确定是否应从应用程序的公共目录(参见 :public_folder 设置)提供静态文件。当 :static 为真时,Sinatra 将检查是否存在静态文件,并在检查匹配路由之前提供该文件。

public 目录存在时,默认情况下会启用 :static 设置。

:public_folder - 静态文件目录

指定应从哪个目录提供静态文件的字符串。默认情况下,假定此目录名为“public”,位于根目录(参见 :root 设置)中。您可以使用以下方法显式设置公共目录:

set :public_folder, '/var/www'

在应用程序根目录中指定备用目录名称的最佳方法是使用引用 :root 设置的延迟值

set :public_folder, Proc.new { File.join(root, "static") }

:views - 视图模板目录

指定视图模板所在目录的字符串。默认情况下,假定此目录名为“views”,位于应用程序的根目录(参见 :root 设置)中。在应用程序根目录中指定备用目录名称的最佳方法是使用引用 :root 设置的延迟值

set :views, Proc.new { File.join(root, "templates") }

:run - 启用/禁用内置 Web 服务器

布尔值,指定应用程序完全加载后是否启动内置 Web 服务器。默认情况下,仅当 :app_file$0 匹配时,才会启用此设置。即,当使用 ruby myapp.rb 直接运行 Sinatra 应用程序文件时。要禁用内置 Web 服务器

set :run, false

:server - 用于内置 Web 服务器的处理程序

Rack 服务器处理程序名称的字符串或数组。当 :run 设置启用时,Sinatra 将遍历该列表并使用第一个可用处理程序启动服务器。默认情况下,:server 设置如下设置

set :server, %w[thin mongrel webrick]

:bind - 服务器主机名或 IP 地址

指定在启用 :run 设置时要监听的接口的主机名或 IP 地址的字符串。开发环境中的默认值为 'localhost',这意味着服务器只能从本地机器访问。在其他环境中,默认值为 '0.0.0.0',这会导致服务器监听所有可用接口。

要在开发环境中监听所有接口(例如,如果您想从本地网络中的其他计算机进行测试),请使用

set :bind, '0.0.0.0'

这也可以通过 -o 选项从命令行设置。如果您在应用程序中设置了 bind 选项,它将覆盖命令行中设置的任何内容。

:port - 服务器端口

启用 :run 设置时启动内置 Web 服务器时应使用的端口。默认端口为 4567。要显式设置端口,请使用

set :port, 9494

:app_file - 主应用程序文件

:app_file 设置用于计算默认的 :root:public_folder:views 设置值。一个常见的习惯用法是通过从主应用程序文件中显式设置 :app_file 来覆盖默认的检测启发式方法

set :app_file, __FILE__

它还用于检测 Sinatra 在使用 经典风格 应用程序时是否应该启动 Web 服务器。

:dump_errors - 将异常回溯日志记录到 STDERR

布尔值,指定在从路由或过滤器引发异常时是否将回溯写入 STDERR。此设置在经典风格的应用程序中默认启用。使用以下方法禁用

set :dump_errors, false

:raise_errors - 允许异常传播到应用程序之外

一个布尔值,指定从路由和过滤器中引发的异常是否应该逃逸应用程序。禁用时,异常会被捕获并映射到错误处理程序,这些处理程序通常会设置 5xx 状态码并渲染自定义错误页面。启用 :raise_errors 设置会导致异常在应用程序外部被引发,在那里它可能会被服务器处理程序或 Rack 中间件处理,例如 Rack::ShowExceptionsRack::MailExceptions

:lock - 使用互斥锁确保单请求并发

Sinatra 可以在多线程环境中使用,在该环境中,一次处理多个请求。但是,并非所有应用程序和库都是线程安全的,可能会导致间歇性错误或一般奇怪的行为。启用 :lock 设置会导致所有请求在互斥锁上同步,确保一次只处理一个请求。

:lock 设置默认情况下是禁用的。

:show_exceptions - 启用优雅的错误页面

启用错误页面,当发生未处理的异常时,显示回溯和环境信息。默认情况下在开发环境中启用。