Korzystanie z Heroku Scheduler z węzłem.js
Nie ma dosłownie żadnego samouczka na temat używania Heroku Scheduler z węzłem.js. Załóżmy, że mam funkcję o nazwie sayHello () {[2] } i chciałbym ją uruchamiać co 10 minut. Jak mogę go używać w kontrolerze. W Rubim piszesz rake function_name () jednak nie ma wyjaśnienia dla węzła. Czy mogę napisać ' / sayHello ' Czy powinienem zrobić dodatkową konfigurację?
5 answers
Utwórz plik <project_root>/bin/say_hello
:
#! /app/bin/node
function sayHello() {
console.log('Hello');
}
sayHello();
process.exit();
Wdrożyć do Heroku i przetestować go za pomocą $ heroku run say_hello
, a następnie dodać go do terminarza o nazwie zadania say_hello
.
Wyjaśnienie
Weźmy say_hello.js
jako przykład węzła.skrypt js, który normalnie byś uruchomił używając $ node say_hello.js
.
Przekształć go w skrypt przez
- usunięcie
.js
zakończenie - wstawianie 'shebang' u góry:
#! /app/bin/node
[1][2] - przeniesienie go do katalogu
bin
[3]
[1] Przeczytaj o jest na Wikipedii .
[2] plik wykonywalny node
jest zainstalowany w app/bin/node
na Heroku. Możesz to sprawdzić, logując się do bash na Heroku za pomocą $ heroku run bash
, a następnie pytając $ which node
.
[3] Heroku wymaga umieszczania skryptów w katalogu bin
. Zobacz Definiowanie zadań w Heroku Dev Center.
Zgadzam się, że dokumentacja Heroku Dla zadań planowania nie jest zbyt jasna dla niczego innego niż skrypty Ruby. Udało mi się to wypracować po próbach i błędach. I mam nadzieję, że to pomoże.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 00:02:48
Lepszym podejściem jest zdefiniowanie pliku harmonogramu wywołanego na przykład {[1] } o następującej treści:
function sayHello() {
console.log('Hello');
}
sayHello();
A potem w harmonogramie heroku, po prostu piszesz {[2] } tak jak definiujesz to w Procfile
i to wszystko!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-04 21:09:23
Odpowiedź Christophe ' a działała dla mnie, dopóki nie musiałem przekazać parametru do skryptu, w którym to momencie nie powiodło się. Problem polega na tym, że node
nie powinno być określone w zadaniu. Oto jak dokładnie go uruchomić:
-
W pliku Procfile zdefiniuj typ procesu dla skryptu. Poniżej znajduje się typowy Procfile z procesem sieciowym oraz, dla uruchomienia " scheduled_job.js", drugi typ procesu o nazwie "worker".
web: node app.js worker: node scheduled_job.js
W Heroku w kolumnie zadania schedulera wystarczy wpisać nazwę typu procesu (w tym przykładzie" worker") z parametrami lub bez. nie wpisuj 'node' przed nim . Heroku pokazuje znak dolara przed nim, więc przykładami poprawnej konfiguracji będą
$ worker
(uruchamiane bez argumentów) lub$ worker 123 abc
(aby wykonać scheduled_job.js z argumentami " 123 "i " abc")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-04 12:52:54
Jestem zdezorientowany, że nikt nie próbował:
$ heroku run node yourScript.js
Więc włóż to do kalendarza Heroku
node yourScript.js
Zadziałało dla mnie.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-28 01:28:59
Następujące kroki działają w mojej sytuacji.
- w folderze głównym Dodaj plik
worker.js
. - in worker.js. Napisz prostą funkcję, jak wyżej.
function sayHello() { console.log('Hello'); } sayHello();
- Przejdź do heroku Scheduler add-ons. Kliknij "Dodaj nową pracę" i wpisz "pracownik" w polu. Następnie Ustaw przedział czasu i kliknij Zapisz.
Oto coś, co należy zauważyć
- Po aktualizacji działa ustawienie.Jeśli użyjesz powyższego przykładu, możesz użyć
heroku run node worker.js
, aby sprawdzić, czy działa. Powinno być Pokaż "cześć" w Twoim terminal. - używam express-babel starter dla mojego węzła.projekt js.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-13 08:05:34