【发布时间】:2013-07-12 00:47:45
【问题描述】:
我的 Survey 模型有大约 2500 个实例,我需要对每个实例应用 set_state 方法两次。只有在每个实例都应用了一次方法之后,我才需要第二次应用它。 (一个实例的状态可以依赖于其他实例的状态。)
我正在使用 delayed_job 创建延迟作业,并使用 workless 根据需要自动放大/缩小我的工人测功机。
set_state 方法通常需要大约一秒钟的时间来执行。所以我在 heroku 控制台上运行了以下命令:
2.times do
Survey.all.each do |survey|
survey.delay.set_state
sleep(4)
end
end
重载 API 应该不会有任何问题,对吧?
然而,对于每个延迟的作业,我仍然在日志中看到以下内容:
Heroku::API::Errors::ErrorWithResponse: Expected(200) <=> Actual(429 Unknown)
我没有看到任何无限循环——它只是在我创建延迟作业后立即返回此消息。
如何避免超出 Heroku 的 API 速率限制?
【问题讨论】:
-
您现在想对每个现有记录执行此
set_state是否正确?为什么不直接从控制台运行它? -
是的,我从控制台运行它,但是 Heroku 不喜欢创建 5000 个延迟的作业,事实上,由于 4 秒的延迟,这没有必要。现在在没有“延迟”方法的情况下从控制台运行它,虽然我必须整晚打开控制台,但它似乎工作得很好。干杯。
-
是的,这就是我的意思!
标签: ruby-on-rails heroku delayed-job