扩展一个击中外部api的应用程序

时间:2011-03-23 02:54:44

标签: ruby-on-rails ruby

我正在使用beanstalkd来后台处理对facebook graph api的api调用,我希望应用程序更新,即每10分钟点击facebook api获取信息。我想创建一个简单的脚本,从db(fb ids / urls)加载必要的信息,在beanstalkd中排队作业,然后睡9分钟。如果内存消耗过大,也许可以使用God来确保脚本继续运行/重启。

然后我开始阅读drbs,并想知道是否有办法/需要整合两者。

我在#rubyonrails中询问并获得了cron和常规rb脚本作为两个选项。只是想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

我建议,为了简化配置,使用delayed_job和一个cronjob调用rake任务来处理作业的排队。

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 gem中提取这些收件人才能让它们运行。