QA@IT

Railsがサーバーとして起動しているか判定

3135 PV

rails server
rails console

それぞれで起動した場合に、サーバーによる起動なのかコンソールによる起動なのか判定って可能でしょうか?

環境は

rails 3.0.5
Phusion Passenger

を使ってます。

追記

質問に慣れておらず、言葉足らずで申し訳ありません。

プログラム中で判定する方法の質問でした。

動的にオブザーバで監視対象をテーブルから設定しています。
ただしrails consoleの時は監視対象から外したいのです。

抜粋すると以下のような形です。
(Markdownが変な風になるのでコードブロック抜きの半角スペースが無視されるので全角スペースです。見づらくてすいません)

#マイグレーション
class CreateObserveTable < ActiveRecord::Migration
 def self.up
  create_table observe_tables do |t|
   t.string :table_name
  end
 end
end

#フィクスチャ
ObserveTable.create{ :table_name => "users"}
ObserveTable.create{ :table_name => "user_profiles"}

#オブザーバ
class OperationLogObserver < ActiveRecord::Observer

 if サーバーからの起動時のみ実行したい
  observe ObserveTable.all.map{|table| table.table_name.classify.to_sym}
 end

 def after_save
  #do something
 end

end

あれから調べて近いものは
http://d.hatena.ne.jp/winebarrel/20090111/p1
のサイトで発見できたんですが。

defined?(Passenger)

で判定できませんでした。

何か判定する良い方法ありますでしょうか。

回答

defined?(IN_PHUSION_PASSENGER)

でいけると思います。

実際、passenger本体のwelcome messageはこの方法で制御されているようです。

ちなみに、passenger以外なら、ObjectSpaceをなめてServer的クラスがnewされてるかどうかを調べるという方法が使えます。

編集 履歴 (0)

Module.const_defined?rails console 起動時にロードされているクラスが定義されているかどうかを確認するという方法があります。

# rails console に irb を使っている場合
Module.const_defined? :IRB
# rails console に pry を使っている場合
Module.const_defined? :Pry

この式で rails console 実行時には true が、
rails server 実行時には false が返るので判定ができるかと思います。

編集 履歴 (0)

回答を消す方法がわからなので、一旦削除します

編集 履歴 (1)

rails serverの起動は、ログで確認できます。

rails consoleに関して、分かりません。

どの場合この要望がありますか?

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。