Heroku上的默认PHP buildpack当前没有PHP CLI支持,因此您只能使用它来通过Apache提供Web请求,而不能用于工作人员dynos中的脚本.但是,如果您使用的是具有CLI支持的PHP buildpack,则可以执行此操作.
为了测试它,我分叉了PHP buildpack,用一个用CLI支持编译的PHP二进制文件,并在Heroku上组装了一个运行计划PHP作业的小型演示.有关分步说明,请参阅项目自述文件.要在现有应用程序上使用此fork,请使用以下命令设置buildpack:
$ heroku config:add BUILDPACK_URL=https://github.com/ryanbrainard/heroku-buildpack-php.git
Run Code Online (Sandbox Code Playgroud)
注意,release在我的叉子脚本设置PATH,以解决php在执行/app/bin/php只php,不像woud需要使用绝对路径默认buildpack.
如何使用Heroku Scheduler运行 PHP 脚本?
使用目录结构,Procfile看起来像这样:
?? Procfile
?? web/
??? (your webfiles)
?? worker/
??? myscript.php
Run Code Online (Sandbox Code Playgroud)
Procfile:
web: vendor/bin/heroku-php-apache2 web/
worker: php worker/myscript.php
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样从命令行测试你的工作人员:
heroku run worker
Run Code Online (Sandbox Code Playgroud)
要安排作业,请进入Heroku Scheduler并以类似方式添加作业,但不带heroku run段(否则您会收到bash: heroku: command not found错误),只需:
worker
Run Code Online (Sandbox Code Playgroud)
或者,或者,直接:
php worker/myscript.php
Run Code Online (Sandbox Code Playgroud)
您可以在应用程序的日志中查看作业。例如:
2017-09-01T14:19:37.397210+00:00 heroku[scheduler.9540]: Starting process with command `php worker/myscript.php`
Run Code Online (Sandbox Code Playgroud)
worker名称Procfile可以设置为其他名称。如:myworker,mysuperduperscript等等。web部分,但如果您只需要一个工作人员/后台服务并且不需要在网络上提供文件,则它是可选的。替代方案:如果出于某种原因,您更愿意对 URL 执行 GET/POST 请求,则可以使用Temporize Scheduler插件。