2013-01-18 4 views
15

Ich bin mit Sinatra mit Apache und Phusion-Passagier mit „klassischen“ Stil:sinatra config.ru: Für was ist der configure-Block?

# config.ru 
require 'sinatra' 

configure do 
    .... 
end 

require './app' 

run Sinatra::Application 

Ich möchte ein paar Dinge definieren. Was ist der Unterschied zwischen der Definition innerhalb des Konfigurationsblocks oder außerhalb?

# 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 

Gibt es einige allgemeine Regeln, was draußen zu tun ist und was im Inneren getan werden sollte? Was ist der Unterschied? Ich testete beide Varianten und beide schienen gleich gut zu funktionieren.

Ich weiß configure verwendet werden können, auf die Umwelt so reagieren:

es
configure :development do 
    .... 
end 

So ist für verschiedene Umwelt-Konfigurationen nützlich. Dieser Anwendungsfall ist klar, aber was ist mit allgemeinen Konfigurationen für jede Umgebung? Wo gebe ich sie hin? Ist das nur eine Frage des Stils?

Antwort

9

Dies ist in erster Linie eine Frage der Umgebungen und in zweiter Linie eine Frage des Stils. Es gibt keinen Unterschied, wo Sie Ihre Konfigurationen platzieren.

Es macht Ihren Code viel lesbarer (IMHO), wenn Sie es in einen Block stecken. Außerdem können Sie umgebungsbasierte Optionen hinzufügen, die Sie dann in ihre eigenen Blöcke einfügen.

Um es zusammenzufassen, es liegt an dir :)

+2

I [die Quelle] (http://rubydoc.info/gems/sinatra/1.3.3/Sinatra/Base.configure) nur gefunden, und es macht wirklich nichts weiter, als den Block mit sich selbst als Argument zurückzugeben. Es ist also nur eine Frage des Stils. – Markus

Verwandte Themen