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ę?

Author: Ali, 2012-11-12

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

  1. usunięcie .js zakończenie
  2. wstawianie 'shebang' u góry: #! /app/bin/node [1][2]
  3. 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.

 76
Author: Philip Poots,
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!

 39
Author: Christophe Vidal,
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ć:

  1. 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
    
  2. 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")

 22
Author: Clafou,
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.
 2
Author: Simon Franzen,
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.

  1. w folderze głównym Dodaj plik worker.js.
  2. in worker.js. Napisz prostą funkcję, jak wyżej. function sayHello() { console.log('Hello'); } sayHello();
  3. 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ć

  1. 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.
  2. używam express-babel starter dla mojego węzła.projekt js.
 1
Author: 陳見綸,
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