2010-12-08 11 views
12

के माध्यम से रैक अप करने के लिए पासिंग विकल्प मैं सिनात्रा सीखने के लिए रूबी के लिए नया हूं। 'sinatra' की आवश्यकता के द्वारा एक सिनात्रा साइट बनाने के दौरान और सीधे मार्गों को स्थापित करना बहुत आसान और अच्छी तरह से प्रलेखित है, 'sinatra/base' की आवश्यकता के द्वारा एक आवेदन तैयार करना और 'Sinatra::Base 'से प्राप्त कक्षा को लिखना, जबकि अपेक्षाकृत आसान है, बहुत खराब दस्तावेज है (शायद क्योंकि यह सिनात्रा की एक सुंदर हालिया विशेषता है)।सिनात्रा आवेदन

और यह वही है जो मैं कर रहा हूं। मुझे सिनात्रा भाग पर बहुत अधिक परेशानी नहीं है, हालांकि मुझे रैकअप/पतली/सर्वर हिस्से में कुछ परेशानी हो रही है। स्पष्ट रूप से आवेदन को तैनात करने के दो तरीके हैं: सिनात्रा का उपयोग करके (run! विधि का उपयोग करके) और एक रैकअप फ़ाइल (आमतौर पर config.ru) का उपयोग करना।

सिनात्रा की run! विधि का उपयोग बेहद सहज है और एक आकर्षण की तरह काम करता है, लेकिन स्पष्ट रूप से यह काम नहीं करता अगर मैं अपने ऐप को उसकेोकू पर तैनात करना चाहता हूं। वास्तव में, गिटहब पर मैंने जिन सभी सीनात्रा ऐप्स का सामना किया है, वे config.ru फ़ाइल का उपयोग करते हैं।

रैकअप फ़ाइल का उपयोग करना उतना ही सहज हो सकता है, लेकिन मैं समझ नहीं पा रहा हूं कि सिनात्रा ऐप से सर्वर (आईआर: पोर्ट) में विकल्पों को कैसे पास किया जाए।

module MyApp 
    class App < Sinatra::Base 
    set :port, 4567 
    set :run, false 
    set :env, :production 

    # ... 

    # config.ru 
    require 'app' 

    run MyApp::App 

सभी: आवेदन वर्ग के भीतर से विकल्पों की स्थापना करके

MyApp::App.set :port, 4567 
MyApp::App.set :run, false 
MyApp::App.set :env, :production 

run MyApp::App 

: ऐप्लिकेशन पर सीधे विकल्प जोड़कर

MyApp::App.default_options.merge!(
    :run => false, 
    :env => :production, 
    :port => 4567 
) 

run MyApp::App 

: मैं rackup के डिफ़ॉल्ट विकल्प सरणी करने के लिए विकल्पों को मर्ज करने की कोशिश की उपर्युक्त विधियां विफल संदेशों को दिखाकर या किसी भी विकल्प को ध्यान में रखते हुए विफल रहीं। तो रैकअप फ़ाइल का उपयोग करते समय एक सिनात्रा ऐप के माध्यम से रैकअप/पतली/सेवर को विकल्प पास करने का कोई तरीका है? या प्रश्नों में विकल्प सीधे कमांड लाइन विकल्प के माध्यम से रैकअप/पतली/सेवर पर पारित किया जाना चाहिए? https://github.com/AzizLight/Wiki/

उत्तर

11

आप actully कमांड लाइन पर सीधे या एक विन्यास फाइल के माध्यम से पतली करने के लिए विकल्पों को पारित करने के लिए जा रहे हैं:

समस्या के लिए एक संदर्भ के रूप में, यहाँ थोड़ा सिनात्रा आवेदन मैं निर्माण कर रहा हूँ। सभी विकल्पों को देखें:

$ thin -h 

उत्पादन के लिए, एक विन्यास फाइल का उपयोग करें:

--- 
address: localhost 
port: 3020 
servers: 4 
max_conns: 1024 
max_persistent_conns: 512 
timeout: 30 
environment: production 
pid: tmp/pids/thin-production.pid 
log: log/thin-production.log 
daemonize: true 
+0

धन्यवाद एक बहुत :) –

3

मैं जानता हूँ कि मैं पुनर्जीवित कर रहा हूँ:

$ thin -C thin-production.yml -R config.ru start 

यहाँ एक उदाहरण पतली production.yml फ़ाइल है यहां एक प्राचीन प्रश्न है, लेकिन मैं अभी तक एक और उपयोगी समाधान में आया हूं जिसका अभी तक उल्लेख नहीं किया गया है। के रूप में this rack wiki tutorial में कहा गया है:

पहली पंक्ति #\ के साथ शुरू व्यवहार किया जाता है जैसे कि यह विकल्प था, rackup तर्क कॉन्फ़िग फ़ाइल में निर्दिष्ट किया जा करने की इजाजत दी।

तो अगर आप 5656 को 0.0.0.0 और बंदरगाह के लिए अपने मेजबान सेट करने के लिए चाहता था, तो आपको निम्न पंक्ति अपने config.ru फ़ाइल की शुरुआत करने के लिए जोड़ होगा:

#\ -o 0.0.0.0 -p 5656 
+0

पूरी तरह से काम करता है। लेकिन कोड से मूल्य निर्धारित करने का कोई तरीका है? उदाहरण के लिए: पोर्ट => RACK_ENV == "उत्पादन"? 8080: 3000 – 18augst

+0

शायद 'if \' के भीतर '# \' टिप्पणी सेटिंग लाइनों को संलग्न कर रहा है? हालांकि यकीन नहीं है –

संबंधित मुद्दे