ruby - sinatra config.ru : what is the configure block for?

标签 ruby configuration sinatra passenger

我将 Sinatra 与 Apache 和“经典”风格的 Phusion-Passenger 一起使用:

# config.ru
require 'sinatra'

configure do
    ....
end

require './app'

run Sinatra::Application

我想定义一些东西。在配置 block 内部或外部定义它有什么区别?

# config.ru
require 'sinatra'

# A) Defining logger here
rack = File.new("logs/rack.log", "a+") 
use Rack::CommonLogger, rack

# B) Global variables here
LOGGER = Logger.new(...)

# C) Gem configuration here
DataMapper::Property::Boolean.allow_nil(false)

configure do
    # A) Or defining logger here?
    rack = File.new("logs/rack.log", "a+") 
    use Rack::CommonLogger, rack

    # B) Or global variables here?
    LOGGER = Logger.new(...)

    # C) Or gem configuration here?
    DataMapper::Property::Boolean.allow_nil(false)
    ....
end

require './app'

run Sinatra::Application

是否有一些一般规则应该在外面做什么,应该在里面做什么?有什么区别?我测试了这两种变体,它们似乎都同样有效。

我知道 configure 可以像这样对环境使用react:

configure :development do
    ....
end

所以它对不同的环境配置很有用。这个用例很清楚,但是每个环境的通用配置呢?我把它们放在哪里?这只是风格问题吗?

最佳答案

这首先是环境问题,其次是风格问题。您放置配置的位置没有区别。

如果将代码放入 block 中,它确实会使您的代码更具可读性(恕我直言)。它还可以让您添加基于环境的选项,然后将这些选项放入各自的 block 中。

总而言之,这取决于你:)

关于ruby - sinatra config.ru : what is the configure block for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409349/

相关文章:

ruby - 在 block 内使用yield时出现错误 no block

java - 与 Action 和拦截器不同的字符串

ruby - 在 Rack::Test 中使用 Cookie

ruby - Bundler 无法与 rbenv 一起工作,找不到 [gem]

ruby-on-rails - Ruby:打开 URI。从远程 url 获取文件名

ios - Rubymotion x Facebook iOS SDK//安装问题//[!] 无法找到 `Facebook-iOS-SDK` 的规范

ruby-on-rails - YAML::load 引发未定义的类/模块错误

c# - .NET 属性网格 - 使用 App.config 设置可浏览(bool)

class - 根据一台机器上安装的类选择 puppet 模板

ruby - 使用 omnicontacts gem 在 ruby​​ 脚本中获取雅虎联系人