2012-07-10 8 views
7

मैं थिन कमांड लाइन के माध्यम से --ssl, --ssl-key-file और --ssl-cert-file पैरामीटर पास किए बिना थिन के माध्यम से चलने वाले स्टैंडअलोन सिनात्रा एप्लिकेशन में एसएसएल को सक्षम करने का एक आसान तरीका ढूंढ रहा हूं।क्या मैं सिनात्रा में एसएसएल को थिन के साथ सक्षम कर सकता हूं?

क्या उन्हें सीधे सिनात्रा ऐप के भीतर या config.ru फ़ाइल के माध्यम से परिभाषित करना संभव है?

मैंने इस प्रश्न का उत्तर देने में कई घंटे बिताए हैं, लेकिन अभी तक कुछ भी नहीं मिला है जो काम करता है।

+0

स्क्रिप्ट फ़ाइल में कमांड लाइन लिखने के बारे में कैसे? – lidaobing

उत्तर

10

मैंने बस इसे बाहर निकालने की कोशिश करने में कुछ घंटे बिताए।

यह पता चला Thin::Server.initialize छोड देता है ssl विकल्प अपने initialization विधि के दौरान (Backend के अपने उदाहरण है, जो तुरंत अपनी nil को ssl सेट करे, तो ssl विकल्प आप Thin::Server.new में पारित कर दिया गया है अनदेखी करने के लिए इसे प्रतिनिधियों। इसका मतलब है कि यह आप के लिए करने के लिए है । सेट ssl विकल्पों के बाद आप किसी सर्वर instantiated है)

यहाँ यह कैसे करना है:

class App < Sinatra::Base 

    # ... 

    def self.run! 
    rack_handler_config = {} 

    ssl_options = { 
     :private_key_file => '/path/to/foo.key', 
     :cert_chain_file => '/path/to/bar.crt', 
     :verify_peer => false, 
    } 

    Rack::Handler::Thin.run(self, rack_handler_config) do |server| 
     server.ssl = true 
     server.ssl_options = ssl_options 
    end 
    end 
end 

App.run! 
+0

वास्तव में एक उपयोगी उदाहरण :-) धन्यवाद – rtacconi

9

टी हेस दिन (sinatra 1.4.1) run! सर्वर उत्पन्न करता है जो एक ब्लॉक स्वीकार करता है। तो अगर आप ऐसा कर सकते हैं:

MyApp.run! do |server| 
    ssl_options = { 
    :cert_chain_file => '/path/to/bar.crt', 
    :private_key_file => '/path/to/foo.key', 
    :verify_peer => false 
    } 
    server.ssl = true 
    server.ssl_options = ssl_options 
end 
+1

बहुत अच्छा! इन विकल्पों को कहां दस्तावेज किया गया है? - मुझे आपकी पोस्ट के अलावा कुछ भी नहीं मिल रहा है! – user1513388

+1

http://rdoc.info/github/eventmachine/eventmachine/EventMachine/Connection:start_tls जाहिर है कि यहां क्या हो रहा है। – Swizzlr

0

मैं Rack::SslEnforcer का उपयोग कर सिनात्रा और पतला चल रहा हूँ (Heroku पर) SSL के साथ, यह कर:

if production? 
    require 'rack/ssl-enforcer' 
    use Rack::SslEnforcer 
end 

यह इससे पहले कि आप सक्षम होना चाहिए: में सत्र अपने फ़ाइल।

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