sinatra config.ru:配置块是什么?

Mar*_*kus 17 ruby configuration passenger sinatra

我正在使用带有"经典"风格的Apache和Phusion-Passenger的Sinatra:

# config.ru
require 'sinatra'

configure do
    ....
end

require './app'

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

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

# 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
Run Code Online (Sandbox Code Playgroud)

是否有一些一般规则应该在外面做什么以及应该在里面做什么?有什么不同?我测试了两种变体,两者似乎同样有效.

我知道configure可以用来对这样的环境做出反应:

configure :development do
    ....
end
Run Code Online (Sandbox Code Playgroud)

因此它适用于不同的环境配置.这个用例很清楚,但是每个环境的一般配置呢?我把它放在哪里?这只是风格问题吗?

thr*_*ree 11

这首先是环境问题,第二是风格问题.您放置配置没有区别.

如果你把它放到一个块中,它确实使你的代码更具可读性(恕我直言).此外,它还允许您添加基于环境的选项,然后将这些选项放入各自的块中.

总结一下,这取决于你:)

  • 我刚刚找到[源代码](http://rubydoc.info/gems/sinatra/1.3.3/Sinatra/Base.configure),它实际上只是让自己作为一个参数产生块.所以这只是风格问题. (2认同)