【发布时间】:2017-05-01 09:32:17
【问题描述】:
在我的 heroku 应用程序中,我有一个需要超过 30 秒才能执行的任务,我无法增加执行时间,因为 heroku 不允许这样做。 我从前端的 API 获取数据,然后使用 AJAX 将其发送到服务器以将这些数据插入数据库。服务器中的这个过程需要 30 多秒才能完成,它给了我一个超时错误。
我创建了 Procfile 如下:
worker: cd ~/www/ && ~/php/bin/php worker.php
worker.php 文件获取使用 AJAX 发送的数据,然后将其插入数据库。
我在 heroku 仪表板中启用了工作人员
我想要实现的是仅当我单击启动 ajax 调用的按钮时才启动此工作程序。我不想使用 heroku 调度程序,因为这个脚本每个月只会运行一次,或者在客户想要添加新产品时运行。 此外,如果我使用调度程序,我不知道如何将数据从 API 发送到服务器。
如果这不可能,有没有办法强制 heroku 增加执行时间?
谢谢
【问题讨论】:
-
...为什么您需要它作为后台工作人员,而实际上它仅在 Ajax POST 进入时才被执行...就像通常的虚拟主机一样?
-
@Nick Li 因为整个应用程序冻结,直到插入数据库完成。我认为作为后台工作者不会发生这种情况
-
我怀疑这是问题所在,即使您插入 100k 行也不应该花费 30 秒。从单个 Ajax 执行超过 30 秒,您的脚本规模可能证明有一个私有服务器是合理的。除了插入数据,你还用你的脚本做什么?
-
好吧,我夸大了一点……但您可能需要优化插入 MySQL 的方式以减少执行时间,请查看其他帖子 stackoverflow.com/questions/19682414/…
-
@NickLi 这是脚本的确切活动。我将一个包含大约 7000 个对象的数组发送到服务器。然后我在这个数组中循环,对于每个对象 id,我检查该值是否已经存在于数据库中,如果它更新了,我用新值更新整行,如果没有,我将它作为新行插入。所以它不仅仅是插入
标签: php ajax heroku background-process worker