13

私はルビーに不慣れで、シナトラを学んでいます。直下のルートを要求して設定することでSinatraサイトを作成するの'sinatra'は非常に簡単で、かなり文書化されていますが、''sinatra/base'から継承するクラスを要求して作成することでアプリケーションを作成すること'Sinatra::Baseは、比較的簡単ですが、文書化が非常に不十分です(おそらく、シナトラのかなり最近の機能)。

そしてそれはまさに私がしていることです。シナトラの部分ではあまり問題はありませんが、ラックアップ/シン/サーバーの部分で少し問題があります。どうやら、アプリケーションをデプロイする方法は2つありますrun!。Sinatra自体を使用する(メソッドを使用する)方法と、ラックアップファイルを使用する方法(通常はconfig.ru)です。

Sinatraのrun!方法を使用することは非常に直感的で魅力のように機能しますが、アプリをherokuにデプロイしたい場合は機能しないようです。実際のところ、GitHubで遭遇したほとんどすべてのSinatraアプリはconfig.ruファイルを使用しています。

ラックアップファイルの使用も同様に直感的かもしれませんが、Sinatraアプリからサーバー(ir:ポート)にオプションを渡す方法を理解できません。オプションをrackupのデフォルトのオプション配列にマージしようとしました。

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

上記のすべての方法は、エラーメッセージを表示するか、オプションを考慮しなかったために失敗しました。それで、ラックアップファイルを使用するときにSinatraアプリを介してラックアップ/シン/サーバーにオプションを渡す方法はありますか?または、質問のオプションをコマンドラインオプションを介してラックアップ/シン/サーバーに直接渡す必要がありますか?

問題への参照として、これが私が構築している小さなSinatraアプリケーションです:https ://github.com/AzizLight/Wiki/

4

2 に答える 2

11

実際には、コマンド ラインで直接または構成ファイルを介して、オプションを thin に渡します。すべてのオプションを見る:

$ thin -h

本番環境では、構成ファイルを使用します:

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

以下は、thin-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 
于 2010-12-14T03:45:52.017 に答える
3

ここで古い質問を復活させていることは知っていますが、まだ言及されていない別の有用な解決策に出くわしました。このラック wiki チュートリアルに記載されているとおり:

で始まる最初の行#\はオプションであるかのように扱われ、ラックアップ引数を構成ファイルで指定できます。

したがって、ホストを に0.0.0.0、ポートをに設定する場合は、次の行をファイル5656の先頭に追加します。config.ru

#\ -o 0.0.0.0 -p 5656
于 2016-05-01T18:34:01.487 に答える