我正在尝试使用 heroku 调度程序运行 php 脚本。我应该在 heroku 中的 $ 之后输入什么命令。我一直找不到文件。我已将要运行的文件传输到 heroku,但使用调度程序运行它时运气不佳。
2 回答
Heroku 上的默认 PHP buildpack 目前不支持 PHP CLI,因此您只能使用它来通过 Apache 提供 Web 请求,而不能用于 worker dynos 中的脚本。但是,如果您使用的是支持 CLI 的 PHP buildpack,这是可能的。
为了测试它,我对 PHP buildpack 进行了分叉,将 PHP 二进制文件换成了使用 CLI 支持编译的二进制文件,并将在 Heroku 上运行预定 PHP 作业的小演示放在一起。有关分步说明,请参阅项目的自述文件。要在现有应用程序上使用此分支,请将 buildpack 设置为:
$ heroku config:add BUILDPACK_URL=https://github.com/ryanbrainard/heroku-buildpack-php.git
请注意,release
我的 fork 中的脚本设置了使用 justPATH
解析php
可执行文件,这与需要使用绝对路径的默认 buildpack 不同。/app/bin/php
php
如何使用Heroku Scheduler运行 PHP 脚本?
测试和设置作业
具有目录结构并Procfile
看起来像这样:
├─ Procfile
├─ web/
├── (your webfiles)
├─ worker/
└── myscript.php
Procfile
:
web: vendor/bin/heroku-php-apache2 web/
worker: php worker/myscript.php
然后你可以像这样从命令行测试你的工作人员:
heroku run worker
要安排作业,请进入Heroku Scheduler并以类似的方式添加作业,但没有heroku run
段(否则您会收到bash: heroku: command not found
错误),只需:
worker
或者,或者,直接:
php worker/myscript.php
检查工作
您可以在应用程序的日志中看到该作业。例如:
2017-09-01T14:19:37.397210+00:00 heroku[scheduler.9540]: Starting process with command `php worker/myscript.php`
笔记
- 中的
worker
名称Procfile
可以设置为其他名称。例如:myworker
、mysuperduperscript
等。 - 我包括了一个
web
部分,但如果您想要的只是一个工作人员/后台服务并且不需要在网络上提供文件,那么它是可选的。
替代方案:如果出于某种原因,您希望对 URL 执行 GET/POST 请求,则可以使用Temporize Scheduler插件。