2013-01-18 21 views
15

我使用西納特拉與Apache和的Phusion-乘客與「經典」風格:sinatra config.ru:什麼是配置塊?

# config.ru 
require 'sinatra' 

configure do 
    .... 
end 

require './app' 

run Sinatra::Application 

我要定義一些事情。在配置塊內部或外部定義它有什麼區別?

# 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可以用來對環境這樣的反應:

configure :development do 
    .... 
end 

因此,它是針對不同的環境配置有用。這個用例很明顯,但是對於每個環境的一般配置呢?我把他們放在哪裏?這只是一個風格問題嗎?

回答

9

這首先是環境問題,其次是風格問題。你放置你的配置沒有區別。

如果將其放入塊中,它確實使您的代碼更具可讀性(恕我直言)。此外,它還會讓您添加基於環境的選項,然後將它們放入各自的塊中。

概括起來,它給你:)

+2

我剛剛發現[出處](http://rubydoc.info/gems/sinatra/1.3.3/Sinatra/Base.configure),和它實際上只不過是讓自己作爲一個參數而讓自己變成塊。所以這只是一個風格問題。 – Markus