2012-03-11 12 views
19

पर तर्क पास करें सरल प्रश्न: मैं config.ru में अपने sinatra ऐप में विकल्प पास करने में सक्षम होना चाहता हूं। वो कैसे संभव है? मेरे config.ru इस तरह दिखता है:नए सिनात्रा ऐप

run MyApp 

लेकिन मैं तर्क ले करने के लिए अपने MyApp कक्षा में इस करना चाहते हैं:

class MyApp < Sinatra::Base 
    def initialize(config) 
    @config = config 
    end 
end 

लेकिन मैं यह करने के लिए एक तरह से समझ नहीं कर सकते हैं। विचार?

उत्तर

23
  1. उपयोग set/settings

    require 'sinatra/base' 
    
    class MyApp < Sinatra::Base 
        get '/' do 
        settings.time_at_startup.to_s 
        end 
    end 
    
    # Just arbitrarily picking time as it'll be static but, diff for each run. 
    MyApp.set :time_at_startup, Time.now 
    
    run MyApp 
    
  2. एक कॉन्फ़िग फ़ाइल का प्रयोग करें। योगदान में Sinatra::ConfigFile (जो भी एक YAML फ़ाइल से सेट और सेटिंग्स, लेकिन लोड पैरामीटर का उपयोग करता है) देखें

+0

वास्तव में क्या मैं के लिए देख रहा था। धन्यवाद! – Ronze

+2

तो मेरे पास अलग-अलग तरीकों से कॉन्फ़िगर किए गए एक ही ऐप्स के कई संस्करण नहीं हो सकते हैं? – andreypopp

5

आप पैरामीटर वाला कॉन्फ़िगर करना चाहते हैं, तो मैं पता लगा आप ऐसा कर सकते हैं:

require 'sinatra/base' 

class AwesomeApp < Sinatra::Base 
    def initialize(app = nil, params = {}) 
    super(app) 
    @bootstrap = params.fetch(:bootstrap, false) 
    end 
end 
+0

config.ru में आप 'run AwesomeApp.new (ऐप, बूटस्ट्रैप: सत्य)' का उपयोग करेंगे। कारण आप या तो अपनी कक्षा या अपनी कक्षा का एक उदाहरण पारित कर सकते हैं कि 'सिनात्रा :: बेस' क्लास विधि 'कॉल' के साथ आता है जिसमें अनिवार्य रूप से 'new.call (env)' कॉल होता है। https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1485 – phylae

1

rnicholson's response ज्यादातर मामलों में सर्वश्रेष्ठ उत्तर हो जाएगा, लेकिन अगर क्या आप चाहते हैं अपने मार्गों में एक उदाहरण चर के लिए उपयोग किया जा सकता है, तो आप before फिल्टर का उपयोग कर के रूप में Sinatra README में विस्तार से बताया इन सेट कर सकते हैं:

फ़िल्टरों का मूल्यांकन उसी संदर्भ में प्रत्येक अनुरोध से पहले किया जाता है क्योंकि मार्ग होंगे और अनुरोध और प्रतिक्रिया को संशोधित कर सकते हैं। उदाहरण चर फिल्टर में सेट मार्गों और टेम्पलेट्स द्वारा उपलब्ध हैं:

before do 
    @note = 'Hi!' 
    request.path_info = '/foo/bar/baz' 
end 

get '/foo/*' do 
    @note #=> 'Hi!' 
    params['splat'] #=> 'bar/baz' 
end 
संबंधित मुद्दे