3

在 Heroku 上运行连续工作进程的最佳方法是什么?我的应用程序需要这个进程 24/7 运行,所以delayed_job 或其他队列似乎有点矫枉过正。我可以通过 Heroku 控制台手动触发该过程,并且可以分离它自己运行。

最好,我只想将这个单一的方法调用分配给一个 dyno,这样当我的应用程序启动时,它会启动额外的 worker-dyno,然后调用我的单一方法并开始嗡嗡作响。但不确定如何分配该方法调用?

我可以使用延迟的工作,它可以解决所有问题,但似乎我需要一个立即(调用时)而不是计划的独特活动。但也许这是唯一的方法。

4

1 回答 1

3

在您的 Procfile 中,您可以为额外的工人工作添加一个单独的进程

# Procfile
web: ...
worker: ...
collector: bundle exec ruby stats_collector.rb -p $PORT # or any other command

然后,您可以使用$ heroku ps:scale collector=1. 它将单独运行,并在每次部署时停止并重新启动。我想说的是,您的应用程序所做的事情必须是安全的,可以随时被中断才能使用如此长时间运行的进程。

如果中断可能会导致问题(例如,您只想完成一次的事情在重新启动后会执行两次),那么使用例如Sidekiq将消息排队的“传统”后台工作人员可能是一个更安全的解决方案。

更新

如果您想在 Rails 应用程序的上下文中以非交互方式执行长时间运行的代码,可以使用rails runner命令。

# Procfile
web: ...
worker: ...
collector: bundle exec rails runner 'MyModel.my_long_running_job'
于 2012-10-10T17:15:24.467 回答