Планировщик Heroku выполняет файл PHP

Я пытаюсь запустить php-скрипт, используя планировщик heroku. Какую команду я должен положить после $ in heroku. Я продолжаю получать файл не найден. Я передал файл, который я хочу запустить в герою, но не повезло с его запуском с планировщиком.

По умолчанию PHP buildpack на Heroku в настоящее время не поддерживает PHP CLI , поэтому вы можете использовать его только для обслуживания веб-запросов через Apache, а не для скриптов в рабочих динамиках. Однако это возможно, если вы используете PHP-пакет, который имеет поддержку CLI.

Чтобы проверить это, я разблокировал PHP buildpack , отключил двоичный файл PHP, который был скомпилирован с поддержкой CLI, и собрал небольшую демонстрацию запуска запланированной работы PHP на Heroku . Смотрите пошаговое руководство по проекту. Чтобы использовать эту вилку в существующем приложении, установите buildpack с помощью:

$ heroku config:add BUILDPACK_URL=https://github.com/ryanbrainard/heroku-buildpack-php.git 

Обратите внимание, что сценарий release в моей вилке устанавливает PATH для разрешения исполняемого файла php в /app/bin/php с помощью только php , в отличие от стандартного buildpack, для которого требуется использование абсолютного пути.

Как запустить 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 и т. д.
  • Я включил web раздел, но это необязательно, если все, что вам нужно, это служба рабочего / фона и не нужно обслуживать файлы в Интернете.

Альтернатива: если по какой-либо причине вы предпочитаете выполнять запрос GET / POST по URL-адресу, вы можете использовать надстройку Temporize Scheduler .