Il n'y a littéralement aucun tutoriel sur l'utilisation de Heroku Scheduler avec Node.js. Supposons que j'ai une fonction appelée dis bonjour() et je voudrais l'exécuter toutes les 10 minutes. Comment puis-je l'utiliser dans le contrôleur. En Ruby vous écrivez rake nom_fonction () cependant aucune explication n'a été faite pour Node. Puis-je écrire '/dis bonjour' ou devrais-je faire une configuration supplémentaire?
Créez le fichier <project_root>/bin/say_hello
:
#! /app/bin/node
function sayHello() {
console.log('Hello');
}
sayHello();
process.exit();
Déployez sur Heroku et testez-le avec $ heroku run say_hello
puis ajoutez-le au planificateur avec le nom de la tâche say_hello
.
Prenez say_hello.js
comme exemple de script Node.js que vous exécuteriez normalement en utilisant $ node say_hello.js
.
Transformez-le en script en
.js
fin#! /app/bin/node
[1] [2]bin
[3][1] Lisez à propos de Shebang sur Wikipedia .
[2] L'exécutable node
est installé dans app/bin/node
sur Heroku. Vous pouvez le vérifier en vous connectant à bash sur Heroku avec $ heroku run bash
puis demander $ which node
.
[3] Heroku nécessite que les scripts soient placés dans le répertoire bin
. Voir Définir les tâches dans Heroku Dev Center.
Je suis d'accord que la documentation Heroku pour la planification des tâches n'est pas très claire pour autre chose que Ruby scripts. J'ai réussi à le résoudre après quelques essais et erreurs. J'espère que cela aide.
Une meilleure approche consiste à définir votre fichier de planification appelé par exemple worker.js
avec le contenu suivant:
function sayHello() {
console.log('Hello');
}
sayHello();
puis dans le programme heroku, vous écrivez simplement node worker
comme vous le définissez dans le Procfile
et c'est tout!
La réponse de Christophe a fonctionné pour moi jusqu'à ce que je devais passer un paramètre au script, auquel cas il a échoué. Le problème est que node
ne doit pas être spécifié dans la tâche. Voici comment exactement le faire fonctionner:
Dans votre Procfile, définissez un type de processus pour votre script. Voir ci-dessous pour un Procfile typique avec un processus Web et, pour exécuter "sched_job.js", un deuxième type de processus nommé avec imagination "travailleur".
web: node app.js worker: node scheduled_job.js
Dans la colonne Tâche du planificateur Heroku, entrez simplement le nom du type de processus ("travailleur" dans cet exemple) avec ou sans paramètres. Ne saisissez pas 'node' avant. Heroku montre un signe dollar devant lui, donc des exemples d'une configuration valide seraient $ worker
(exécuté sans arguments) ou $ worker 123 abc
(pour exécuter schedule_job.js avec les arguments "123" et "abc")
Je suis confus que personne n'ait essayé:
$ heroku run node yourScript.js
Alors mettez ça dans Heroku Scheduler
node yourScript.js
A travaillé pour moi.
PS: assurez-vous de import
tout ce dont votre script a besoin.
Les étapes suivantes fonctionnent dans ma situation.
worker.js
.function sayHello() { console.log('Hello'); } sayHello();
Voici quelque chose que vous devriez remarquer
heroku run node worker.js
Pour vérifier si cela fonctionne. Il devrait afficher "Bonjour" dans votre terminal.