12

私はEventMachineMonetarilyを使用して、Rails アプリケーションと一緒に e TCP サーバーを起動しています。から始まりconfig/initializers/momentarily.rbます。

私の問題は、のような rake タスクを実行したときにも開始されることですdb:migrate。HTTPサーバーを起動したときにのみ起動したい。サーバーの起動タスクとレーキ タスクの両方が開発環境にあるため、環境は役に立ちません。アプリケーションが他のものではなく HTTP サーバーを実行していることを知る方法はありますか? rake タスクだけでなく、Rails コンソールを実行すると EM も起動することに注意してください。これも私の場合は望ましくありません。

4

7 に答える 7

9
unless File.basename($0) == "rake" && ARGV.include?("db:migrate")
  # you are not in rake db:migrate
end
于 2012-09-03T06:19:23.027 に答える
8

私が知っているこれを行う素晴らしい方法はありません。newrelicのアプローチ ( local_environment.rbdiscover_dispatcherで確認) をコピーできます。これには基本的に、パッセンジャー、シンなどの内部で実行されているかどうかを検出するために使用されるヒューリスティックのリストがあります。

乗客用チェック

defined?(::PhusionPassenger)

薄い場合はチェックします

if defined?(::Thin) && defined?(::Thin::Server)
于 2012-09-03T11:09:00.537 に答える
0

アプリケーションの起動後、シェルアウトしてチェックすることができますps。HTTP サーバーが実行中であり、実行中の HTTP サーバーの pid がアプリケーションと同じであることが示されている場合ps( を調べて pid を確認してください$$)、TCP サーバーを起動できます。

于 2012-09-01T09:25:54.347 に答える
0

たぶん、に基づいて初期化子にスイッチを実装できますARGVか?

何かのようなもの:

if ARGV.join(' ').match /something/
  # your initializer code here
end
于 2012-08-23T09:35:41.813 に答える
0

イニシャライザから他のサーバーを起動しないでください。でデーモンを作成しscript/momentarily、アプリ内から起動します。

于 2012-08-23T10:34:18.897 に答える