2011-03-23 38 views
0

我使用beanstalkd到后台进程API调用Facebook的图形API的外部API的应用程序,我希望应用程序更新,即打的Facebook API,每10分钟获得的信息。我想创建一个简单的脚本,从db(fb ids/urls)加载必要的信息,将beanstalkd中的作业排队,然后休眠9分钟。如果内存消耗太大,也许使用上帝来确保脚本继续运行/重新启动。向外扩展击中

然后,我开始阅读关于DRB的,想知道如果有一种方法/需要整合两个。

我问#rubyonrails并得到了cron和定期RB脚本两个选项。只是想知道是否有更好的方法。

回答

1

为了简化配置,我会推荐使用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,让他们运行。

+0

嗯,我使用beanstalkd背景排队。 delayed_job依赖于Rails,更不用说它每隔x秒轮询一次数据库。正如问题中提到的那样,在irc中讨论了使用cron,我正在寻找一些新的想法。 – 2011-03-23 12:26:59