配置设置
Sinatra 包含许多内置设置,用于控制是否启用某些功能。设置是应用程序级别的变量,可以使用 set
、enable
或 disable
方法进行修改,并通过 settings
对象在请求上下文中可用。应用程序可以自由设置自定义设置以及框架提供的默认内置设置。
使用 set
、enable
和 disable
在最简单的形式中,set
方法接受一个设置名称和值,并在应用程序上创建一个属性。可以通过 settings
对象在请求中访问设置。
延迟评估
当设置值为 Proc
时,每次读取设置时都会执行评估,以便可以使用其他设置来计算值。
除非修改 foo
设置,否则 /baz
响应应为“baz 设置为 Hello bar”。
配置多个设置
可以通过将 Hash 传递给 set
来设置多个设置。前面的示例可以改写为
使用 enable
和 disable
设置多个布尔设置
enable
和 disable
方法是将一组设置分别设置为 true
或 false
的语法糖。以下两个代码示例是等效的。
使用 set
内置设置
:environment
- 配置/部署环境
一个指定部署环境的符号;通常设置为以下之一::development
、:test
或 :production
。 :environment
默认值为 APP_ENV
环境变量的值 (ENV['APP_ENV']
),当没有设置 APP_ENV
环境变量时,默认为 :development
。
环境可以显式设置
set :environment, :production
:sessions
- 启用/禁用基于 cookie 的会话
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 请求看起来像其他请求方法(例如,PUT
、DELETE
),并且通常仅在不支持全部 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::ShowExceptions
或 Rack::MailExceptions
。
:lock
- 使用互斥锁确保单请求并发
Sinatra 可以在多线程环境中使用,在该环境中,一次处理多个请求。但是,并非所有应用程序和库都是线程安全的,可能会导致间歇性错误或一般奇怪的行为。启用 :lock
设置会导致所有请求在互斥锁上同步,确保一次只处理一个请求。
:lock
设置默认情况下是禁用的。
:show_exceptions
- 启用优雅的错误页面
启用错误页面,当发生未处理的异常时,显示回溯和环境信息。默认情况下在开发环境中启用。