0

過去にDelayed_jobを使用しました。Ruby 1.8.6から1.8.7にアップグレードできないサーバーで実行されている古いプロジェクトがあるため、Delayed Jobを使用できないため、BackgroundJobshttp ://codeforpeople.rubyforge.orgを試しています。 / svn / bj / trunk / README

私は自分の仕事が実行されるようにそれを機能させていますが、何かが正しくないようです。たとえば、次のようにジョブを実行すると、次のようになります。

jobs = Bj.submit "echo hi", :is_restartable => false, :limit => 1, :forever => false

次に、bj_jobテーブルにジョブが表示され、stdoutの「hi」とともに完了したことがわかります。また、テーブルには1つのジョブしか表示されておらず、再実行されません。

私がこれを行う場合、何らかの理由で:

jobs = Bj.submit "./script/runner ./jobs/calculate_mean_values.rb #{self.id}", :is_restartable => false, :limit => 1, :forever => false

ジョブは引き続き期待どおりに完了しますが、bj_jobテーブルに新しい行が挿入され続け、開発サーバーを停止するまでメソッドが何度も実行されます。それはそれがどのように機能することになっているのですか?

Ruby1.8.6とRails2.1.2を使用していますが、アップグレードするオプションがありません。私はBjのプラグインフレーバーを使用しています。

モデルを保存した後、プロセスを1回実行するだけでよいので、次のようにスクリプト/ランナーを直接使用してプロセスを実行します。

system " RAILS_ENV=#{RAILS_ENV}   ruby  #{RAILS_ROOT}/script/runner   'CompositeGrid.calculate_values(#{self.id})'  & "

しかし、私がバックグラウンドジョブで何か間違ったことをしているのかどうか知りたいのですが、

4

1 に答える 1

1

OK、これは愚かなユーザーエラーでした。結局のところ、プロセスを再開して無限のループを作成するコールバックがありました。コールバックを修正した後、期待どおりに機能しています。

于 2011-01-07T23:44:29.217 に答える