2012-08-01 59 views
3

我要为我的应用程序Rails 3.2.3和Heroku设置一些功能。我们的想法是每天运行一项任务或任务(或任何你想调用它的任务),以确保来自外部API的用户信息与我的db中的用户信息保持一致。我很好奇什么是设置这个最好的方法?它应该是一个运行rake任务的cron作业吗?Rails背景过程(Heroku Rails 3+)

似乎有很多方法可以做到这一点,我对其他人做这件事的方式感兴趣。我认为做这件事的唯一方法是在cron工作中运行rake任务,但希望弄清楚最佳实践是什么,或者最简单的方法。似乎有很多方法可以为这只猫蒙皮......也有很多不同的工具。

如果有一种纯粹的导轨方式可以做到这一点,我认为这样会更好,所以我不必为每个将我的应用程序放到我的应用程序上的系统搞砸。

回答

2

对于每天运行一次的简单同步作业,我认为从长远来看,cronjob就足够了,并且可能更稳定。

老实说,像Resque和Sidekiq这样的解决方案在我看来有点矫枉过正(为了您的需要)。您仍然需要使用调度程序将消息发送到这些系统。

退房宝石“每当”,如果你正在寻找做的crontab更易于部署和写作:https://github.com/javan/whenever/

Railscasts关于“无论何时”:http://railscasts.com/episodes/164-cron-in-ruby

+0

哦,是的,我听说过每次从railscasts和记得像语法...记得它很简单。我终于可以试用了,谢谢。 – botbot 2012-08-01 18:59:44

+0

我也非常喜欢“ruby中的cron作业”这个概念,因为这些功能会绑定到我的应用程序,而不是一个heroku插件或一些cronjob,它们将不得不在另一个系统上重新运行。只是非常喜欢我的应用程序中包含的功能的想法。 – botbot 2012-08-01 19:07:28

+0

准确地说 - 然后如果你转移到另一个系统(假设它是* nix),那么你只需运行whatever命令,就完成了。该配置存储在您的应用程序中。另一种方法是使用Capistrano在部署时写入crontab。 – 2012-08-01 19:44:53

2

有两种选择。他们比你提到的选项要好

  1. Resque
  2. Sidekiq

尝试后面的一个。它更快,更轻巧,并且基于多线程,因此不会干扰系统。你需要调查每天处理的宝石的调度程序。

希望这会有所帮助!

+0

随着Sidekiq,如果发生了什么Sidekiq进程意外退出?它是否有某种类型的看门狗进程? – 2012-08-01 03:09:50

+0

它重试!我不确定看门狗流程。你可以在他们的IRC频道上询问 – 2012-08-01 06:09:38

+0

显然没有提到看门狗的文件。更不用说你仍然需要安排消息发送。我不同意Resque和Sidekiq会比简单的crontab更好。有时候一个简单的方法更适合日常工作。如果您的后台进程不重,则可以使用 – 2012-08-01 13:45:08

1

下面是几个可供选择:(与resque-scheduler但你必须使用Redis的吧)

  1. resque
  2. rufus-scheduler(如果你想要的东西简单,resque使用鲁弗斯调度本身)
  3. 您可以尝试delayed_job,并使用一些窍门如this one。对于调度来说不是很好,但可以使用应用程序数据库。
+0

感谢您的建议@ az7ar我会研究这些。到目前为止,我所听到的那些'每当'的建议都是......你如何将'每当'与你所建议的工具进行比较? – botbot 2012-08-01 19:01:00

+0

我会说,如果你只想每天/每小时/每月执行一项任务,那么你不需要resque/delayed_job。你应该使用rufus-scheduler或者任何时候。 我想这归结于这两者之间的个人偏好。 – az7ar 2012-08-02 15:14:58

2

使用Heroku scheduler添加到手柄调度本身。你可以让它运行一个rake任务,resque或其他任何东西。

+0

是Heroku日程表只是cron的包装?最后,我可能不想在heroku上运行我的应用程序,虽然我喜欢heroku,并且可能会将它保留在那里。但在我将我的应用从heroku移出的情况下,好像我不得不重新创建这个功能,这是我想避免的。 – botbot 2012-08-01 19:05:35

+0

我不认为cron在Heroku上可靠地工作。文件系统不是持久的或者共享的,你可以有很多实例,所以你最终可能会运行相同的cron任务并试图为你的共享数据库提供资源。或者如果你只有一个实例,它可能会减速并完全忘记。但是,如果调度与任务分离,那么在另一个服务上运行时,用cron替换Heroku调度程序非常容易。 – Qsario 2012-08-01 20:12:49