Планировщик Heroku выполняет PHP-файл
Я пытаюсь запустить PHP-скрипт с помощью планировщика heroku. Какую команду я должен ввести после $ в heroku. Я продолжаю получать файл не найден. Я передал файл, который я хочу запустить в heroku, но не повезло с запуском его с планировщиком.
2 ответов
по умолчанию PHP buildpack на Heroku в настоящее время не имеет поддержка php CLI, поэтому вы можете использовать его только для обслуживания веб-запросов через Apache, а не для скриптов в рабочих dynos. Однако это возможно, если вы используете PHP buildpack, который имеет поддержку CLI.
чтобы проверить это, я раздвоенный PHP buildpack, переключил двоичный файл PHP с тем, который был скомпилирован с поддержкой CLI, и собрал небольшой демонстрация запуска запланированного PHP работа на Heroku. Вижу проекта readme для пошаговых инструкций. Чтобы использовать эту вилку в существующем приложении, установите buildpack с помощью:
$ heroku config:add BUILDPACK_URL=https://github.com/ryanbrainard/heroku-buildpack-php.git
внимание release
скрипт в моей вилке настраивает PATH
разрешить php
исполняемый в /app/bin/php
С php
, В отличие от buildpack по умолчанию, который woud требует использования абсолютного пути.
как запустить PHP-скрипт В Heroku Планировщик?
тестирование и настройка работы
со структурой каталогов и 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 Планировщик и добавьте работу аналогичным образом, но без 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
, etc. - я включил
web
раздел, но это необязательно, если все, что вы хотите, это работник / фоновая служба и не нужно обслуживать файлы в интернете.
альтернатива: если по какой-либо причине вы предпочтете выполнить запрос GET/POST по URL-адресу, вы можете использовать Temporize Scheduler надстройки.