2013-01-18 13 views
15

Używam Sinatra z Apache i Phusion-osobowe o "klasycznym" stylu:sinatra config.ru: do czego służy blok konfiguracji?

# config.ru 
require 'sinatra' 

configure do 
    .... 
end 

require './app' 

run Sinatra::Application 

chcę definiować pewne rzeczy. Jaka jest różnica między definiowaniem go wewnątrz bloku konfiguracyjnego lub na zewnątrz?

# 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 

Czy istnieją pewne ogólne zasady, co należy zrobić na zewnątrz i co należy zrobić w środku? Jaka jest różnica? Przetestowałem oba warianty i oba wyglądały równie dobrze.

wiem configure może być używany do reagowania na środowisko tak:

configure :development do 
    .... 
end 

Więc to jest przydatne dla różnych konfiguracji środowiska. Ten przypadek użycia jest jasny, ale co z ogólnymi konfiguracjami dla każdego środowiska? Gdzie je umieszczam? Czy to tylko kwestia stylu?

Odpowiedz

9

Jest to na pierwszym miejscu kwestia środowisk, a po drugie kwestia stylu. Nie ma różnicy gdzie umieszczasz swoje konfiguracje.

Sprawia, że ​​twój kod jest dużo czytelniejszy (IMHO), jeśli umieścisz go w bloku. Ponadto pozwala dodawać opcje środowiskowe, które następnie można umieścić w odpowiednich blokach.

Podsumowując, to do ciebie :)

+2

Właśnie znalazłem [źródło] (http://rubydoc.info/gems/sinatra/1.3.3/Sinatra/Base.configure) oraz tak naprawdę nie robi nic więcej, jak tylko argument, że blokuje się jako argument. To tylko kwestia stylu. – Markus