2013-01-18 40 views
15

मैं अपाचे और "क्लासिक" शैली के साथ 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

यह पहली जगह वातावरण की बात है और दूसरी जगह शैली की बात है। कोई फर्क नहीं पड़ता है जहां आप अपनी कॉन्फ़िगरेशन डालते हैं।

यदि आप इसे ब्लॉक में डालते हैं तो यह आपके कोड को और अधिक पठनीय (IMHO) बनाता है। इसके अलावा यह आपको पर्यावरण आधारित विकल्पों को जोड़ने देगा जो आप अपने संबंधित ब्लॉक में डालते हैं।

यह निष्कर्ष निकालने के लिए, यह आप पर निर्भर है :)

+2

मैं सिर्फ पाया [स्रोत] (http://rubydoc.info/gems/sinatra/1.3.3/Sinatra/Base.configure), और यह वास्तव में एक तर्क के रूप में ब्लॉक के साथ उपज करने से ज्यादा कुछ नहीं करता है। तो यह केवल शैली का मामला है। – Markus