Я пытаюсь запустить 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 .