Rails 3 中的 Rufus 调度程序实现

发布于 2024-11-16 15:48:14 字数 174 浏览 5 评论 0原文

我有一个在生产中使用 apache +乘客运行的应用程序。目前,我在初始化程序中初始化 rufus 调度程序,并注册从该初始化程序中的数据库读取的作业。 apache/passenger 的工作方式是它创建应用程序的多个进程/实例,这会导致调度程序多次初始化并调度重复的作业。

使调度程序成为单例对象的正确实现是什么?

I have an app running with apache + passenger in production. Currently I initialize the rufus scheduler in a initializer and register jobs reading from a db in that initializer. Way apache/passenger works is that it creates multiple process/instance of the app which causes the scheduler to get initialized multiple times and will schedule duplicate jobs.

What is the correct of implementing this so that the scheduler is a singleton object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰魂雪魄 2024-11-23 15:48:14

您可能希望将 Rufus Scheduler 实现为应用程序之外的单独工作进程。

我不会将其作为初始化程序,而是实现一个启动它的 Rake 任务。

# Rakefile
desc "Starts the Scheduler worker"
task :scheduler do
  require 'path/to/your/scheduler/file'

  scheduler.join
end

然后只需运行rake Scheduler即可在后台启动它。


奖励:由于您的应用程序现在需要并排 2 个进程,因此请使用 Foreman 来管理应用程序的多个进程。您可以通过创建一个名为 Procfile 的文件来完成此操作:

# Procfile
web:       thin start -p 4242
scheduler: rake scheduler

然后使用 Foreman 启动您的应用程序:(请务必先gem install foreman

$ foreman start

这将同时调用两个进程。

You probably want to implement Rufus Scheduler as a separate worker process outside your application.

Instead of putting it as an initializer, I would implement a Rake task that starts it.

# Rakefile
desc "Starts the Scheduler worker"
task :scheduler do
  require 'path/to/your/scheduler/file'

  scheduler.join
end

Then just run rake scheduler to start it in the background.


Bonus: Since your app now needs 2 processes side by side, use Foreman to manage the multiple processes of your application. You can do this by creating a file called Procfile:

# Procfile
web:       thin start -p 4242
scheduler: rake scheduler

Then start your app with Foreman: (be sure to gem install foreman first)

$ foreman start

This will invoke both processes simultaneously.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文