Railsで非同期処理を実装する方法としてdelayed_jobやResqueを使う方法などがありますが、今回はdelayed_jobを使って見ました。
モジュールのメソッドでも使えるのはありがたいです。
module Hoge
def self.test
#処理
end
end
Hoge.delay.test
こんな感じに使えます。
testメソッドの内容を更新し、delayed_jobで処理していたのですが、ここで問題が発生しました。
処理の内容が変わりません。。。
なので、delayed_jobの再起動をしましょう。Railsのルートディレクトリに移動して下記実行
script/delayed_job restart
capistranoを使っている場合はこちらのdeploy.rbにもdelayed_jobの再起動を行うコードを追加しましょう。
after "deploy:start", "delayed_job:start"
after "deploy:stop", "delayed_job:stop"
after "deploy:restart", "delayed_job:restart"
namespace :delayed_job do
desc "Restart the delayed_job process"
task :restart, :roles => :app do
run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job restart"
end
task :stop, :roles => :app do
run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job stop"
end
task :start, :roles => :app do
run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job start"
end
end