1

ユーザーが曲を投稿するたびに呼び出される遅延ジョブがあります。このジョブは、アクティビティの投稿をユーザーの Facebook ウォールに送信します。これは、ジョブのコードとコントローラーでの呼び出しです。

Ryan Bates Facebook Open Graph Railscast'delayed_job_active_record'に見られるような宝石を 使用しています

user.rb

def self.post_song(user_id, song_url)
    user = User.find(user_id)
    user.facebook.put_connections("me", "virtual_piano:post", song: song_url)
  end

posts_controller.rb

(upon successful save)
        User.delay.post_song(current_user.id, post_url(@post))

このジョブは、標準の開発モードで実行されますrake jobs:work

遅延ジョブを使用している人を見RAILS_ENV=production script/delayed_job startたことがあります。本番環境でこのメソッドを呼び出して、バックグラウンドで実行し続けるにはどうすればよいですか?

どうもありがとう!

4

2 に答える 2

7

rake jobs:workindelay_job はrails sRails のコマンドのようなもので、コマンドを実行したコンソール (シェル) のメイン プロセスで実行されます。それを含むコンソール(シェル)の実行が停止すると(つまり、ログアウトすると)、実行が停止することを意味します。

代わりに実行することをお勧めしますRAILS_ENV=production script/delayed_job start- これは、rails の場合と同様に、delayed_job キューをデーモン (バックグラウンド プロセス) として開始しますrails s -n

于 2012-10-10T16:39:17.333 に答える
2

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

require 'delayed/command'
Delayed::Command.new(ARGV).daemonize

これにより、delayed_job がバックグラウンドで実行されます。

フォアグラウンドで実行したい場合は、次のような単純なスクリプトを作成できます。

worker = Delayed::Worker.new({}) # or add options
worker.start
于 2012-10-10T16:39:40.973 に答える