为了简化配置,我会推荐使用delayed_job和一个叫做rake任务的cronjob来处理作业的排队。
Monit也是一个很好的替代上帝,似乎是更稳定,更少的内存饿了过程监控。
对于延迟的工作,你需要以下内容添加到您的部署脚本(假设你打算与Capistrano的部署)
namespace :delayed_job do
def rails_env
fetch(:rails_env, false) ? "RAILS_ENV=#{fetch(:rails_env)}" : ''
end
desc "Stop the delayed_job process"
task :stop, :roles => :app do
run "cd #{current_path};#{rails_env} script/delayed_job stop"
end
desc "Start the delayed_job process"
task :start, :roles => :app do
run "cd #{current_path};#{rails_env} script/delayed_job start"
end
desc "Restart the delayed_job process"
task :restart, :roles => :app do
run "cd #{current_path};#{rails_env} script/delayed_job stop"
run "cd #{current_path};#{rails_env} script/delayed_job start"
end
end
我不得不提取从delayed_job的宝石,这些recipies,让他们运行。
嗯,我使用beanstalkd背景排队。 delayed_job依赖于Rails,更不用说它每隔x秒轮询一次数据库。正如问题中提到的那样,在irc中讨论了使用cron,我正在寻找一些新的想法。 – 2011-03-23 12:26:59