2

rails 3.0.9 (ruby 1.9.2) でdelayed_jobを動作させるのに苦労しています。私が実行に成功した唯一の方法は、コマンド rake jobs:work を手動でテープに記録することです。しかし、レールアプリケーションの起動時に自動的に開始されるようにしたいです。

ubuntuにmonitをインストールし、アプリにあるファイルを起動するように構成しました。これは次のように失敗します。

check process delayed_job with pidfile /home/me/myapp/tmp/pids/delayed_job.pid
start program = "/home/me/myapp/script/delayed_job start"
stop program = "/home/me/myapp/script/delayed_job stop" 

そして、delayed_job スクリプト ファイルに環境設定を追加しました。

#!/usr/bin/env ruby

    ENV['RAILS_ENV'] = "development"
    require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
    require 'delayed/command'
    Delayed::Command.new(ARGV).daemonize

コマンド「sudo monit startdelayed_job」を実行すると、次のエラーが表示されます。

/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- bundler/setup (LoadError)

だから、sudoが間違ったバージョンのruby環境を使用しているためだと思います。それから、次の解決策を試しました: rvm monitdelayed_job

start program / stop program 行に rvm -S を追加します。しかし、それでもエラーで失敗します: rvm コマンドが見つかりません

私のrvmディレクトリは私のホームディレクトリ/home/me/.rvmにあります

( sudo changes PATH -Why? )で回避策を見つけて、追加して PATH 環境変数を変更しようとしました

/usr/bin/env PATH=/home/me/.rvm/bin:$PATH

コマンド「sudo monit startdelayed_job」が成功しました!そして労働者は始めました。しかし、問題は次のとおりです。sudo /etc/init.d/monit start を起動し、syslog を見ると、まだ「delayed_job」が起動に失敗しました。

したがって、さらに調査する方法、monit の詳細なエラーを取得する方法がわかりません。

4

2 に答える 2

2

私はついにこの問題を解決することに成功しました。monit ファイルを次のように変更しました。

check process delayed_job with pidfile /home/me/myapp/tmp/pids/delayed_job.pid
start program = "/bin/su - me -c 'cd /home/me/myapp/; script/delayed_job start'"
stop program = "/bin/su - me -c 'cd /home/me/myapp/; script/delayed_job stop'"

最新バージョンに問題があるように見えるため、daemons gem もダウングレードしました。だから私は今デーモンv 1.0.10を使用しています

また、ログ ファイル /home/me/myapp/log/delayed_job.log の権限も変更しました。これは、root の前に作成されたようで、ユーザーがアクセスできなかったためです (コマンド「スクリプトをテストするのに問題がありました」)。 /delayed_job start" ("me" ユーザー)

于 2011-08-27T12:34:09.753 に答える
1

これは、ENVを適切に読み取ることができた唯一の行です

start program = "/usr/local/rvm/bin/rvm-shell -c 'cd /var/www/[APP]/current/; RAILS_ENV=production bundle exec bin/delayed_job start'"

それが役に立てば幸い!

于 2014-09-27T19:03:22.230 に答える