7

私は非常に基本的なテストアプリを持っています。このコマンドを実行すると、サーバーは指定したポートを無視し、ポート 4567 で Thin を実行します。指定したポートが無視されるのはなぜですか?

$ruby xxx.rb start -p 8000

== Sinatra/1.3.3 has taken the stage on 4567 for production with backup from Thin
>> Thin web server (v1.4.1 codename Chromeo)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

xxx.rb ファイル

require 'Thin'

rackup_file = "config.ru" 

argv = ARGV
argv << ["-R", rackup_file ] unless ARGV.include?("-R")
argv << ["-e", "production"] unless ARGV.include?("-e")

puts argv.flatten

Thin::Runner.new(argv.flatten).run!

config.ru ファイル

require 'sinatra'
require 'sinatra/base'

class SingingRain < Sinatra::Base
    get '/' do
        return 'hello'
    end
end

SingingRain.run!
4

3 に答える 3

16
#\ -p 8000

これをconfig.ruの一番上に置きます

于 2013-09-24T03:01:41.890 に答える
14

あなたの問題は次の行にあります:

SingingRain.run!

これはSinatraのrunメソッドであり、デフォルトでポート4567で実行される独自のWebサーバーを起動するようにSinatraに指示します。これはconfig.ruファイルにありますが、config.ruRubyであるため、この行は他の.rbファイルにあるかのように実行されます。これが、シナトラがそのポートで起動するのを見る理由です。

CTRL-Cでこのサーバーを停止すると、Thinはconfig.ruファイルの読み込みを続行して、実行するアプリを決定しようとします。で実際にアプリを指定していないconfig.ruため、次のように表示されます。

^C>> Stopping ...

== Sinatra has ended his set (crowd applauds)
/Users/matt/.rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/builder.rb:129:in `to_app': missing run or map statement (RuntimeError)
        from config.ru:1:in `<main>'
        ...

このエラーは、構成ファイルで実行するアプリを実際に指定していないことを示しているだけです。

の代わりにSingingRain.run!、次を使用します。

run SingingRain

run実行するアプリを指定するRackメソッドです。また、次のこともできますrun SingingRain.new。Sinatraは、ここでクラス自体またはインスタンスのみを使用できるようにするための手順を実行します。

これに対する出力は次のようになります。

>> Thin web server (v1.4.1 codename Chromeo)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:8000, CTRL+C to stop

Sinatraは組み込みサーバーを実行していないため、== Sinatra/1.3.2 has taken the stage on 4567 for production with backup from Thinメッセージは表示されません。構成したとおりのThinサーバーにすぎません。

于 2012-09-25T11:21:12.523 に答える
-3

あなたのconfig.ruに追加

設定:ポート=> 8000

また、本番環境へのデプロイを簡単にするパッセンジャー+nginxのようなものでSinatraを使用することを強くお勧めします。ただし、heroku にデプロイする場合は、これについて心配する必要はありません。

于 2012-09-24T06:14:10.310 に答える