Executando scripts ruby personalizados

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.

1 curtida

Eu me pergunto se meu caso de uso é mais simples do que expliquei inicialmente. Eu normalmente faço o seguinte:

./launcher enter app
rails c

> u= User.find(1)
> mais código aqui

O que eu gostaria de fazer:

./launcher enter app
./my_code.rb

onde my_code.rb contém o conteúdo do que eu executo no console do rails antes.

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!

2 curtidas

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.

Aqui estão vários exemplos: discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

2 curtidas

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.