Ich versuche ein PHP-Skript mit dem Heroku-Scheduler auszuführen. Welchen Befehl sollte ich nach dem $ in heroku eingeben? Ich bekomme immer Datei nicht gefunden. Ich habe die Datei übertragen, die ich ausführen möchte, aber nicht Glück mit dem Scheduler zu laufen.
Das Standard-PHP-Buildpack auf Heroku hat derzeit keine PHP-CLI-Unterstützung , die Sie nur verwenden können Es dient Web-Anfragen über Apache und nicht für Skripte in Worker-Dynos. Dies ist jedoch möglich, wenn Sie ein PHP-Buildpack verwenden, das über CLI-Unterstützung verfügt.
Um es auszuprobieren, habe ich das PHP-Buildpack ausgehackt und die PHP-Binärdatei mit einer anderen Version ersetzt wurde mit CLI-Unterstützung kompiliert und stellte eine kleine Demo zum Ausführen eines geplanten PHP-Jobs auf Heroku zusammen . In der Liesmich Schritt-für-Schritt-Anleitung finden Sie weitere Informationen. Um diese Verzweigung in einer vorhandenen App zu verwenden, setzen Sie das Buildpack mit:
%Vor% Beachten Sie das release
Skript in meinem fork richtet die PATH
ein, um die php
ausführbare Datei in /app/bin/php
mit nur php
aufzulösen, im Gegensatz zum Standard-Buildpack, für das der absolute Pfad benötigt wird.
So führen Sie ein PHP-Skript mit Heroku Scheduler aus?
Mit einer Verzeichnisstruktur und Procfile
, die ungefähr so aussehen:
Procfile
:
Dann können Sie Ihren Worker über die Befehlszeile wie folgt testen:
%Vor% Um einen Job zu planen, gehen Sie zu Heroku Scheduler und fügen den Job auf ähnliche Weise hinzu, aber ohne das heroku run
-Segment (sonst erhalten Sie bash: heroku: command not found
errors), nur:
Oder alternativ direkt:
%Vor%Sie können den Job in den Logs der App sehen. z.B.:
%Vor%worker
Name in Procfile
könnte auf etwas anderes gesetzt werden. z. B .: myworker
, mysuperduperscript
, usw. web
eingefügt, aber er ist optional, wenn Sie nur einen Arbeiter- / Hintergrunddienst benötigen und keine Dateien im Web bereitstellen müssen. Alternativ: Wenn Sie aus irgendeinem Grund eine GET / POST-Anfrage für eine URL ausführen möchten, können Sie das Temporize Scheduler Add-on verwenden.