2012-07-10 11 views
7

--ssl--ssl-key-file--ssl-cert-fileのパラメータをThinコマンドライン経由で渡すことなく、Thin経由のスタンドアロンのSinatraアプリケーションでSSLを有効にする簡単な方法を探しています。SinatraでThinでSSLを有効にすることはできますか?

Sinatraアプリまたはconfig.ruファイルで直接定義することはできますか?

私はこの質問に対する答えを探して数時間を費やしましたが、これまでのところ何の効果も見いだせませんでした。

+0

スクリプトファイルにコマンドラインを書き込む方法はありますか? – lidaobing

答えて

10

私はこの1時間を自分で考えようと数時間を費やしました。

それはすぐにあなたがThin::Server.newに渡されたすべてのSSLオプションを無視して、nilにそのsslを設定Backendのそのインスタンスへのinitialization方法(委譲中Thin::Server.initialize破棄sslオプションをことが判明した。これは、あなたがにしなければならないことを意味。セットSSLオプションは、サーバーをインスタンス化してきました後

は、ここでそれを行う方法は次のとおりです。

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

T hese days(sinatra 1.4.1)run!は、サーバを生成するブロックを受け入れます。私は、Rack::SslEnforcerを使用してSSLで(Herokuの上)シナトラとシンを実行し、これをやっている

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

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

あなたが有効にする前にこれがあるべき:あなたの中のセッションをだからあなたはこれを行うことができますファイル。