0

動作中のデーモンを正しく動作させるのに問題があります。私が走るとき:

ruby script/workling_client run

デーモンはレールのロードを開始しますが、無期限にハングします。プロセスを強制終了すると、スタックトレースは常に同じになります。

/Library/Ruby/Gems/1.8/gems/activesupport-2.1.2/lib/active_support/core_ext/load_error.rb:32:in `new': Interrupt
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:510:in `require'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:355:in `new_constants_in'
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:510:in `require'
from /Library/Ruby/Gems/1.8/gems/httpclient-2.1.2/lib/httpclient.rb:68
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
 ... 81 levels...
from /Library/Ruby/Gems/1.8/gems/daemons-1.0.10/lib/daemons/cmdline.rb:105:in `call'
from /Library/Ruby/Gems/1.8/gems/daemons-1.0.10/lib/daemons/cmdline.rb:105:in `catch_exceptions'
from /Library/Ruby/Gems/1.8/gems/daemons-1.0.10/lib/daemons.rb:138:in `run'
from script/workling_client:18

デーモンライブラリなしでスクリプトを実行すると、期待どおりに機能します。実際、Rails環境を必要とするものをロードするためにデーモンgemを使用するのに問題がありました。何か案は?

更新:workling_clientはworklingslisten.rbをデーモンとしてロードします。listen.rbにrailsをロードする代わりに、代わりにworkling_clientにロードされるように変更し、プロセスは問題なく機能します。したがって、デーモン化されたスクリプトでレールをロードできない理由がいくつかあります:-(

4

2 に答える 2

1

デーモン スクリプトを開始するコードを投稿できますか? レールをデーモン スクリプトでロードできることはわかっています。これは、delayed_jobs スクリプトで実行しているためです。

スクリプトの最初の部分は次のことを行います。

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config',
      'environment'))

Rails プロジェクトの environment.rb ファイルを調整します。次に、プロセスは自身をデーモン化します。

Worker::Command.new(ARGV, :workers => worker_config).daemonize

このスクリプトは、デーモン化ステップを実行する前にレールをロードします。これが機能しない場合は、スクリプトがレールをロードする方法を含めてください。

于 2011-02-09T17:31:41.523 に答える
0

モニターなしで作業を開始してみてください。

options = {
  :app_name   => "workling",
  :ARGV       => ARGV,
  :dir_mode   => :normal,
  :dir        => File.join(File.dirname(__FILE__), '..', 'log'),
  :log_output => true,
  :multiple   => false,
  :backtrace  => true,
  :monitor    => false
}
于 2010-11-30T02:41:38.820 に答える