Heroku 上的延迟作业不起作用
Delayed Job on Heroku does not work
我的应用程序 运行 在我的本地机器上运行良好,它有 16 G 的 Ram 使用 'heroku local' 命令启动 dyno 和使用 Procfile 的工作人员。 Delayed Job中排队的后台作业一个一个处理,然后清空table。当我在 Heroku 上 运行 时,它根本无法执行后台处理。它在我的日志文件中卡住了以下内存不足消息:
2016-04-03T23:48:06.382070+00:00 app[web.1]: Using rack adapter
2016-04-03T23:48:06.382149+00:00 app[web.1]: Thin web server (v1.6.4 codename Gob Bluth)
2016-04-03T23:48:06.382154+00:00 app[web.1]: Maximum connections set to 1024
2016-04-03T23:48:06.382155+00:00 app[web.1]: Listening on 0.0.0.0:7557, CTRL+C to stop
2016-04-03T23:48:06.711418+00:00 heroku[web.1]: State changed from starting to up
2016-04-03T23:48:37.519962+00:00 heroku[worker.1]: Process running mem=541M(105.8%)
2016-04-03T23:48:37.519962+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2016-04-03T23:48:59.317063+00:00 heroku[worker.1]: Process running mem=708M(138.3%)
2016-04-03T23:48:59.317063+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2016-04-03T23:49:21.449475+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2016-04-03T23:49:21.449325+00:00 heroku[worker.1]: Process running mem=829M(161.9%)
2016-04-03T23:49:24.273557+00:00 app[worker.1]: rake aborted!
2016-04-03T23:49:24.273587+00:00 app[worker.1]: Can't modify frozen hash
2016-04-03T23:49:24.274764+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6/lib/active_record/attribute_set/builder.rb:45:in `[]='
2016-04-03T23:49:24.274771+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6/lib/active_record/attribute_set.rb:39:in `write_from_user'
我知道R14内存不足错误。所以我有两个问题:
是否可以调整延迟的作业以占用更少的内存。将涉及一些磁盘交换,但至少会 运行.
为什么我的抽佣总是中止!无法修改冻结的哈希错误(如下所示日志底部的第 4 行和第 5 行)。我在本地环境中没有得到它。这是什么意思?跟内存有关吗?
提前感谢您的宝贵时间。我是 运行ning Rails 4.2.6 和 delayed_job 4.1.1 如下图:
→ gem list | grep delayed
delayed_job (4.1.1)
delayed_job_active_record (4.1.0)
delayed_job_web (1.2.10)
巴拉特
我发现了问题。我在这里 post 为那些可能 运行 遇到类似问题的人提供我的解决方案。
我增加了 heroku worker 内存以使用 2 个标准 dynos,这意味着我给它 1 Gig 内存以消除内存配额问题。这让 R14 消失了,但我仍然继续得到
耙子中止!
无法修改冻结哈希
错误,然后程序将崩溃。所以问题很明显在这里。经过多方研究,我发现以前的程序员使用 'workless' gem 来减少 heroku 费用。 Workless gem 让 heroku 工作人员在不使用时进入睡眠状态,因此在不使用 运行 heroku 时不会产生任何费用。
我在最初的问题中没有 post 的是我已将应用程序从 Rails 3.2.9 升级到 Rails 4.2.6。我的研究还表明,workless gem 在过去三年中没有升级,并且在他们的网站上 rails 4 上也没有提及。所以它可能无法与 Rails 4.2.6 和 Heroku 一起正常工作。
我在我的堆栈跟踪中看到了一些与 workless gem 相关的行。这是一条线索,让我了解如果我减去会发生什么,即从生产中删除这个 gem。所以我将其删除并重新部署。
冻结的哈希错误消失了,我的 delayed_job worker 运行 在 Heroku 上成功完成。
给我的教训是仔细阅读日志并检查所有依赖项:)
希望对您有所帮助。
我的应用程序 运行 在我的本地机器上运行良好,它有 16 G 的 Ram 使用 'heroku local' 命令启动 dyno 和使用 Procfile 的工作人员。 Delayed Job中排队的后台作业一个一个处理,然后清空table。当我在 Heroku 上 运行 时,它根本无法执行后台处理。它在我的日志文件中卡住了以下内存不足消息:
2016-04-03T23:48:06.382070+00:00 app[web.1]: Using rack adapter
2016-04-03T23:48:06.382149+00:00 app[web.1]: Thin web server (v1.6.4 codename Gob Bluth)
2016-04-03T23:48:06.382154+00:00 app[web.1]: Maximum connections set to 1024
2016-04-03T23:48:06.382155+00:00 app[web.1]: Listening on 0.0.0.0:7557, CTRL+C to stop
2016-04-03T23:48:06.711418+00:00 heroku[web.1]: State changed from starting to up
2016-04-03T23:48:37.519962+00:00 heroku[worker.1]: Process running mem=541M(105.8%)
2016-04-03T23:48:37.519962+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2016-04-03T23:48:59.317063+00:00 heroku[worker.1]: Process running mem=708M(138.3%)
2016-04-03T23:48:59.317063+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2016-04-03T23:49:21.449475+00:00 heroku[worker.1]: Error R14 (Memory quota exceeded)
2016-04-03T23:49:21.449325+00:00 heroku[worker.1]: Process running mem=829M(161.9%)
2016-04-03T23:49:24.273557+00:00 app[worker.1]: rake aborted!
2016-04-03T23:49:24.273587+00:00 app[worker.1]: Can't modify frozen hash
2016-04-03T23:49:24.274764+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6/lib/active_record/attribute_set/builder.rb:45:in `[]='
2016-04-03T23:49:24.274771+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.6/lib/active_record/attribute_set.rb:39:in `write_from_user'
我知道R14内存不足错误。所以我有两个问题:
是否可以调整延迟的作业以占用更少的内存。将涉及一些磁盘交换,但至少会 运行.
为什么我的抽佣总是中止!无法修改冻结的哈希错误(如下所示日志底部的第 4 行和第 5 行)。我在本地环境中没有得到它。这是什么意思?跟内存有关吗?
提前感谢您的宝贵时间。我是 运行ning Rails 4.2.6 和 delayed_job 4.1.1 如下图:
→ gem list | grep delayed
delayed_job (4.1.1)
delayed_job_active_record (4.1.0)
delayed_job_web (1.2.10)
巴拉特
我发现了问题。我在这里 post 为那些可能 运行 遇到类似问题的人提供我的解决方案。
我增加了 heroku worker 内存以使用 2 个标准 dynos,这意味着我给它 1 Gig 内存以消除内存配额问题。这让 R14 消失了,但我仍然继续得到
耙子中止! 无法修改冻结哈希
错误,然后程序将崩溃。所以问题很明显在这里。经过多方研究,我发现以前的程序员使用 'workless' gem 来减少 heroku 费用。 Workless gem 让 heroku 工作人员在不使用时进入睡眠状态,因此在不使用 运行 heroku 时不会产生任何费用。
我在最初的问题中没有 post 的是我已将应用程序从 Rails 3.2.9 升级到 Rails 4.2.6。我的研究还表明,workless gem 在过去三年中没有升级,并且在他们的网站上 rails 4 上也没有提及。所以它可能无法与 Rails 4.2.6 和 Heroku 一起正常工作。
我在我的堆栈跟踪中看到了一些与 workless gem 相关的行。这是一条线索,让我了解如果我减去会发生什么,即从生产中删除这个 gem。所以我将其删除并重新部署。
冻结的哈希错误消失了,我的 delayed_job worker 运行 在 Heroku 上成功完成。
给我的教训是仔细阅读日志并检查所有依赖项:)
希望对您有所帮助。