シナトラアプリケーションを介してラックアップするオプションを渡す
質問
私はRuby、Sinatraを学びます。必要に応じてシナトラサイトを作成している間 'sinatra'
ルートを直接設定するのは非常に簡単で、かなりよく文書化されており、要求することでアプリケーションを作成します 'sinatra/base'
そして、継承するクラスを書く 'Sinatra::Base
'、まだ比較的簡単ですが、文書化は非常に不十分です(たぶん、それはシナトラのかなり最近の特徴だからです)。
そして、それはまさに私がやっていることです。私はシナトラの部分であまり問題を抱えていませんが、ラックアップ/シン/サーバーの部分で少し問題があります。どうやらアプリケーションを展開するには2つの方法があります。Sinatra自体の使用( run!
方法)およびラックアップファイルを使用します(通常 config.ru
).
シナトラの使用 run!
方法は非常に直感的で、魅力のように機能しますが、Herokuにアプリを展開したい場合は、明らかに機能しないようです。実際のところ、私がgithubで遭遇したほとんどすべてのシナトラアプリは config.ru
ファイル。
ラックアップファイルを使用することも同様に直感的かもしれませんが、Sinatraアプリからサーバー(IR:ポート)にオプションを渡す方法を理解することができません。ラックアップのデフォルトオプションアレイへのオプションをマージしようとしました。
MyApp::App.default_options.merge!(
:run => false,
:env => :production,
:port => 4567
)
run MyApp::App
アプリに直接オプションを追加することにより:
MyApp::App.set :port, 4567
MyApp::App.set :run, false
MyApp::App.set :env, :production
run MyApp::App
アプリケーションクラス内からオプションを設定することにより:
module MyApp
class App < Sinatra::Base
set :port, 4567
set :run, false
set :env, :production
# ...
# config.ru
require 'app'
run MyApp::App
上記のすべてのメソッドは、エラーメッセージを表示するか、オプションを考慮していないだけで失敗しました。ラックアップファイルを使用する際に、シナトラアプリを介してラックアップ/シン/severにオプションを渡す方法はありますか?または、質問のオプションは、コマンドラインオプションを介してRackup/Thin/Severに直接渡す必要がありますか?
問題への言及として、ここに私が構築している小さなシナトラアプリケーションがあります: https://github.com/azizlight/wiki/
解決
あなたは、コマンドラインで直接または構成ファイルを介してオプションを薄くするためにオプションを渡すつもりです。すべてのオプションを参照してください:
$ thin -h
生産には、構成ファイルを使用します。
$ thin -C thin-production.yml -R config.ru start
以下は、ThinProduction.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.0.0.0
とポートへ 5656
, 、あなたはあなたの始まりに次の行を追加します config.ru
ファイル:
#\ -o 0.0.0.0 -p 5656