Heroku调度程序执行PHP文件

Luk*_*mit 11 php file scheduler heroku

我正在尝试使用heroku调度程序运行php脚本.在heroku中$后我应该输入什么命令.我一直找不到文件.我已经将要运行的文件传输到heroku,但运行调度程序并不顺利.

rya*_*ard 7

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/phpphp,不像woud需要使用绝对路径默认buildpack.

  • 我意识到我错误的PHP buildpack没有CLI支持,但它确实需要一些调整才能使它工作.有关如何调整它的信息,请参阅@ friism对相关问题的回答:http://stackoverflow.com/a/14390508/129492 (4认同)

Fab*_*ert 5

如何使用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可以设置为其他名称。如:myworkermysuperduperscript等等。
  • 我包括了一个web部分,但如果您只需要一个工作人员/后台服务并且不需要在网络上提供文件,则它是可选的。

替代方案:如果出于某种原因,您更愿意对 URL 执行 GET/POST 请求,则可以使用Temporize Scheduler插件。