Exécution de scripts ruby personnalisés

Je suis capable d’accomplir les tâches que je souhaite à l’aide de la console Rails. Cependant, ces tâches doivent s’exécuter périodiquement et je ne veux pas taper chaque commande une par une dans la console Rails. Comment puis-je exécuter un script Ruby sur mon instance Discourse auto-hébergée ?

De plus, le script lira un fichier CSV, où dois-je placer ce fichier CSV afin qu’il soit toujours accessible à l’intérieur du conteneur Docker et qu’il ne disparaisse pas après les mises à jour ?

Une approche consiste à téléverser le fichier, puis à stocker l’URL dans un paramètre. Le téléversement d’un fichier l’empêchera d’être supprimé.

Vous pouvez avoir un travail exécuté dans un plugin. Il existe de nombreux exemples de travaux dans les plugins Discourse et Pavilion.

1 « J'aime »

Je me demande si mon cas d’utilisation est plus simple que ce que j’ai expliqué initialement. Je fais normalement ce qui suit :

./launcher enter app
rails c

> u= User.find(1)
> encore du code ici

Ce que j’aimerais faire :

./launcher enter app
./my_code.rb

où my_code.rb contient le contenu de ce que j’exécute précédemment dans la console Rails.

vous avez indiqué que vous vouliez « que les tâches s’exécutent périodiquement ».

Si cela est « pour la durée de vie de la communauté », alors il vaut la peine d’écrire votre propre plugin pour le faire. Ce n’est pas beaucoup plus difficile que d’entrer dans la console Rails (désordonné et plus risqué !).

Cela vous permettra également de stocker le code, de le gérer correctement et de l’affiner au fil du temps.

Alternativement, vous pourriez définir une tâche Rake, mais vous devrez la stocker quelque part, potentiellement aussi dans un plugin !

2 « J'aime »

[quote=“Robert, post:4, topic:236408, username:merefield”]vous avez déclaré que vous vouliez « que les tâches s’exécutent périodiquement ».
[/quote]

Oui, c’était un mauvais choix de mots. Ce que je voulais dire, c’est ceci : je dois exécuter ce travail plusieurs fois au cours de la durée de vie de la communauté. Cependant, il n’y a pas de période fixe et le moment où il doit être exécuté est déterminé par un événement extérieur. Je vais donc exécuter la tâche moi-même plusieurs fois sans aucun intervalle de temps régulier entre les deux.

La tâche Rake pourrait donc être votre solution de prédilection. Elle est spécialement conçue pour l’exécution de scripts ad hoc. Je la placerais toujours dans un plugin, car vous pouvez ainsi la gérer proprement sur GitHub et vous n’oublierez jamais où vous l’avez mise ni ne la supprimerez accidentellement.

Voici de nombreux exemples : discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

2 « J'aime »

Vous pourriez soit en faire une tâche rake, soit la placer dans un job que vous devriez démarrer manuellement depuis /sidekiq

Vous pouvez soit télécharger votre csv depuis l’UX et le passer avec une valeur de paramètre comme suggéré, soit le télécharger dans un sujet et faire en sorte que votre script récupère le dernier message/téléchargement du sujet, soit le télécharger dans /var/discourse/shared/standalone/xxx.csv et y accéder comme /shared/xxx.csv dans le script. Ou peut-être devriez-vous faire l’ensemble avec l’API plutôt que de télécharger un fichier csv.

Vous ne décrivez pas ce que vous essayez de faire, juste votre solution qui pourrait ne pas être la meilleure.