我正在使用 Heroku,并希望通过 cron 调用一个脚本(在另一台服务器上),该脚本会定期请求对我的 Heroku 应用程序执行操作。此操作将依次运行一些可能需要 1 或 2 分钟才能完成的处理。我相信 Heroku 有 30 秒的请求限制,我想可以从我的控制器操作中调用 Rake 任务。
这行得通吗?我很好奇是否有人尝试过这个。
谢谢。
我正在使用 Heroku,并希望通过 cron 调用一个脚本(在另一台服务器上),该脚本会定期请求对我的 Heroku 应用程序执行操作。此操作将依次运行一些可能需要 1 或 2 分钟才能完成的处理。我相信 Heroku 有 30 秒的请求限制,我想可以从我的控制器操作中调用 Rake 任务。
这行得通吗?我很好奇是否有人尝试过这个。
谢谢。
只要您不使用 HTTP 请求作为代理来启动任务,rake 任务就可以工作。事实上,如果任务是从 HTTP 请求派生的,则超时将与 HTTP 请求相同。
您应该使用不同的方法来启动任务。crontab(在 Heroku 方面)或 Worker 都是很好的解决方案。
我刚刚创建了一个 gem 来解决这个问题。它允许您将任何 rake 任务作为延迟作业排队,例如
rake delay:db:seed
这将执行
rake db:seed
作为一个delayed_job。您可以在http://rubygems.org/gems/delayed_task或http://blog.opsb.co.uk/long-running-rake-tasks-on-heroku找到它。
我建议为此在工作人员身上使用后台工作。然后,您的定期流程只需启动工作人员,并且该流程花费多长时间都没有关系。