Existe uma maneira de passar o arquivo ruby, foo.rb para o console do Rails. Os resultados esperados seriam após o console iniciar o ambiente Rails para executar o arquivo.
Ou qualquer outra forma que me permitisse executar arquivo em ambiente rails, disparado do prompt de comando.
ruby-on-rails-3
Haris Krajina
fonte
fonte
Respostas:
Na verdade, a maneira mais simples é executá-lo
load
dentro dorails console
fonte
Você pode usar
ATUALIZAR:
O que também temos usado muito ultimamente é carregar o ambiente Rails de dentro do próprio script. Considere
doit.rb
:Isso também funciona se o script ou o diretório de trabalho atual não estiver dentro do diretório do aplicativo Rails.
fonte
f=File.new('path/to/file')
para executar use:f.rewind; eval f.readlines.join("\n");
eval(File.read ...)
peça. Rails aceita um arquivo Ruby como um argumento pararails runner
:Usage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]
rails r path/to/filename.rb
é funcionalmente equivalente aobundle exec rails runner
comando mencionado acima.Entretanto, esta solução foi suportada.
Muito mais simples agora.
fonte
simples, sujo e bloqueia o processo no final, mas faz o trabalho exatamente como eu queria.
fonte
Considere a criação de uma tarefa de rake.
Para código que preciso criar registros ou oferecer suporte a migrações, por exemplo, geralmente crio uma tarefa rake como essa a partir desta resposta . Por exemplo:
Em
lib/tasks/example.rake
:E então, no terminal, execute:
fonte
Dessas abordagens mencionadas anteriormente, nenhuma parecia limpa e ideal como você esperaria que um script autônomo fosse executado (não foi avaliado ou canalizado por meio de <redirecionamento), mas finalmente isso funciona perfeitamente para mim:
(para Rails 3)
Insira no topo do seu script:
Claro, defina seu próprio caminho de aplicativo Rails na linha APP_PATH.
Dessa forma, posso evitar ter que entrar em qualquer interativo
irb
ourails c
e posso testar meu script.rb no prompt do shell, antes, por exemplo. agendá-lo no crontab.Suporta também parâmetros de linha de comando sem problemas e minimiza os níveis de wrappers antes de chegar ao seu código.
CRÉDITO (também mostra um exemplo do Rails 2)
http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html
fonte
Este é o hack que estou usando:
Exemplo:
Com base na resposta de @ moritz aqui. Eu mudei, já que o diretório de trabalho para
File.read
é a raiz do projeto Rails.Eu sei que isso é uma heresia séria, usar python para ajudar um script ruby. Mas não consegui encontrar um
relpath
método integrado ao ruby.Crédito:
relpath()
foi tirado de @MestreLion, converter caminho absoluto em caminho relativo dado um diretório atual usando Bashfonte