Планировщик 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 надстройки.