Sou capaz de realizar as tarefas que desejo usando o console do Rails. No entanto, essas tarefas precisam ser executadas periodicamente e não quero digitar cada comando um por um no console do Rails. Como posso executar um script Ruby em minha instância do Discourse auto-hospedada?
Além disso, o script lerá um arquivo CSV, onde devo colocar este arquivo CSV para que ele ainda seja acessível dentro do contêiner Docker e não desapareça após as atualizações?
Uma abordagem é fazer o upload do arquivo e, em seguida, armazenar a URL em uma configuração. Fazer o upload de um arquivo impedirá que ele seja excluído.
Você pode ter um job executado em um plugin. Existem muitos exemplos de jobs em plugins do Discourse e do Pavilion.
você afirmou que queria “que as tarefas fossem executadas periodicamente”.
se isso for ‘pelo tempo de vida da comunidade’, potencialmente, então vale a pena escrever seu próprio plugin para fazer isso. Não é muito mais difícil do que entrar no console do Rails (bagunçado e mais arriscado!).
Isso também permitirá que você armazene o código e o gerencie adequadamente e o refine ao longo do tempo.
alternativamente, você poderia definir uma tarefa rake, mas precisará armazená-la em algum lugar, potencialmente também em um plugin!
Sim, foi uma má escolha de palavras. O que eu quis dizer foi o seguinte: preciso executar este trabalho várias vezes ao longo da vida da comunidade. No entanto, não há um período fixo e quando ele precisa ser executado é determinado por algum evento externo. Portanto, executarei a tarefa eu mesmo várias vezes sem nenhum intervalo de tempo regular entre elas.
Portanto, uma tarefa do Rake pode ser a sua solução preferida. Ela foi projetada propositalmente para execução de scripts ad hoc. Eu ainda a colocaria em um plugin, pois você pode gerenciá-la bem no GitHub e nunca esquecerá onde a colocou ou a excluirá acidentalmente.
Você pode torná-lo uma tarefa do rake ou colocá-lo em um job que você deve iniciar manualmente a partir de /sidekiq
Você pode fazer o upload do seu csv pela UX e passá-lo com um valor de configuração como sugerido, ou fazer o upload para um tópico e ter seu script obtendo a postagem/upload mais recente no tópico, ou fazer o upload para /var/discourse/shared/standalone/xxx.csv e acessá-lo como /shared/xxx.csv no script. Ou talvez você deva fazer tudo com a API em vez de fazer o upload de um arquivo csv.
Você não descreve o que está tentando fazer, apenas sua solução que pode não ser a melhor.