2010-12-08 6 views
12

Sinatraを学ぶのは初めてのルビーです。 'sinatra'を要求してSinatraサイトを作成し、ルートを直接設定するのはかなり簡単で文書化が容易ですが、'sinatra/base'を要求してアプリケーションを作成し、'Sinatra::Base 'から継承するクラスを作成するのは比較的簡単ですが、これはSinatraのかなり最近の機能だからです)。Sinatraアプリケーションを使ってラックアップにオプションを渡す

これはまさに私がやっていることです。私はSinatraの部分であまりにも多くの問題を抱えていませんが、私はラック/薄い/サーバーの部分に少し問題があります。 Sinatra自体(run!メソッドを使用)を使用し、ラックアップファイル(通常はconfig.ru)を使用して、アプリケーションを展開する方法は2通りあります。

Sinatraのrun!メソッドを使用する方法は非常に直感的で、魅力的なように機能しますが、私がherokuにアプリケーションをデプロイしたい場合は、明らかに動作しません。実際、私がGitHubで遭遇したほとんどすべてのSinatraアプリは、config.ruというファイルを使用しています。

ラックアップファイルを使用すると、同じように直感的になるかもしれませんが、Sinatraアプリケーションからサーバーにオプションを渡す方法を理解できません(ir:ポート)。

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のデフォルトのオプションの配列にオプションをマージしようとしました上記の方法は、エラーメッセージを表示するか、またはオプションを考慮しないことによって失敗しました。だから、ラックアップファイルを使用するときに、Sinatraアプリ経由でラックアップ/シン/サーバーにオプションを渡す方法はありますか?または、質問のオプションは、コマンドラインオプションを使用して直接rackup/thin/severに渡す必要がありますか? https://github.com/AzizLight/Wiki/

答えて

11

あなたはactully直接、またはコンフィギュレーション・ファイルを経由して、コマンドライン上に薄いにオプションを渡すつもりだ:問題への参照として

は、ここで私が構築しています少しシナトラアプリケーションです。すべてのオプションを参照してください:

$ thin -h 

生産のために、設定ファイルを使用します。

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

ここを薄production.ymlファイルの例です:

--- 
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

私が復活しています知っていますここでは古代の質問ですが、私はまだ言及されていない別の有用な解決策を見つけました。 this rack wiki tutorialで述べたように:

#\で始まる最初の行は、それがrackup引数は設定ファイルで指定することができ、オプションであるかのように扱われます。

あなたは5656から0.0.0.0とポートにホストを設定したいのであれば、あなたはあなたのconfig.ruファイルの先頭に次の行を追加します。

#\ -o 0.0.0.0 -p 5656 
+0

。しかし、コードから値を設定する方法はありますか?例えば:port => RACK_ENV == "production"? 8080:3000 – 18augst

+0

おそらく 'else'の中に '#\'コメント設定行を囲んでいますか?確かに –

関連する問題