Esecuzione di script ruby personalizzati

Sono in grado di svolgere i compiti che desidero utilizzando la console Rails. Tuttavia, questi compiti devono essere eseguiti periodicamente e non voglio digitare ogni comando uno per uno nella console Rails. Come posso eseguire uno script Ruby sulla mia istanza Discourse self-hosted?

Inoltre, lo script leggerà un file CSV, dove dovrei mettere questo file CSV in modo che sia ancora accessibile all’interno del container Docker e non scompaia dopo gli aggiornamenti?

Un approccio consiste nell’caricare il file e quindi memorizzare l’URL in un’impostazione. Il caricamento di un file impedirà la sua eliminazione.

È possibile eseguire un job in un plugin. Ci sono molti esempi di job nei plugin di discourse e Pavilion.

1 Mi Piace

Mi chiedo se il mio caso d’uso sia più semplice di quanto ho spiegato inizialmente. Normalmente faccio quanto segue:

./launcher enter app
rails c

> u= User.find(1)
> another code here

Quello che vorrei fare:

./launcher enter app
./my_code.rb

dove my_code.rb contiene il contenuto di ciò che eseguo prima sulla console rails.

hai affermato di volere “che le attività vengano eseguite periodicamente”.

se questo è “per tutta la vita della community”, allora vale la pena scrivere un tuo plugin per farlo. Non è molto più difficile che entrare nella console di Rails (disordinato e più rischioso!).

Ti permetterà inoltre di archiviare il codice, gestirlo correttamente e migliorarlo nel tempo.

In alternativa, potresti definire un’attività rake, ma dovrai archiviarla da qualche parte, potenzialmente anche in un plugin!

2 Mi Piace

Sì, è stata una scelta di parole infelice. Quello che intendevo era il seguente: ho bisogno di eseguire questo job più volte nel corso della vita della community. Tuttavia, non c’è un periodo fisso e quando deve essere eseguito è determinato da un qualche evento esterno. Quindi eseguirò il task da solo più volte senza alcun intervallo di tempo regolare tra un’esecuzione e l’altra.

Quindi un’attività rake potrebbe essere la tua soluzione ideale. È appositamente progettata per l’esecuzione di script ad hoc. La inserirei comunque in un plugin, poiché puoi gestirla bene su GitHub e non dimenticheresti mai dove l’hai messa o la cancelleresti accidentalmente.

Ecco un sacco di esempi: discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

2 Mi Piace

Potresti renderlo un rake task o inserirlo in un job che dovresti avviare manualmente da /sidekiq

Puoi caricare il tuo csv dall’UX e passarlo con un valore di impostazione come suggerito, oppure caricarlo in un topic e far sì che il tuo script ottenga il post/upload più recente nel topic, oppure caricarlo in /var/discourse/shared/standalone/xxx.csv e accedervi come /shared/xxx.csv nello script. O forse dovresti fare tutto con l’API invece di caricare un file csv.

Non descrivi cosa stai cercando di fare, solo la tua soluzione che potrebbe non essere la migliore.