Je veux exécuter un fichier Ruby dans le contexte d'un environnement Rails. Rails. Le coureur fait presque ce que je veux. Oui, mais je voudrais simplement lui donner le nom du fichier et les arguments. Je suis presque sûr que cela est possible depuis que je l’ai déjà fait. Quelqu'un peut-il me rappeler comment faire cela?
Le plus simple est avec Rails runner
parce que vous n'avez pas besoin de modifier votre script.
http://guides.rubyonrails.org/command_line.html#Rails-runner
Dis le Rails runner script.rb
Simplement besoin de environment.rb
dans votre script. Si votre script se trouve dans le répertoire script
de votre Rails app do
require File.expand_path('../../config/environment', __FILE__)
Vous pouvez contrôler l'environnement utilisé (développement/test/production) en définissant le paramètre Rails_ENV
variable d’environnement lors de l’exécution du script.
Rails_ENV=production Ruby script/test.rb
Runner exécute Ruby) code dans le contexte de Rails de manière non interactive.
De Rails runner
commande:
Usage: runner [options] ('Some.Ruby(code)' or a filename)
-e, --environment=name Specifies the environment for the runner to operate under (test/development/production).
Default: development
-h, --help Show this help message.
Vous pouvez également utiliser runner comme ligne Shebang pour vos scripts, comme ceci:
-------------------------------------------------------------
#!/usr/bin/env /Users/me/Rails_project/script/Rails runner
Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------
C'est une vieille question, mais à mon avis, je trouve souvent utile de créer une tâche de commission ... et c'est en fait très facile.
Dans lib/tasks/example.rake
:
namespace :example do
desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
User.create! first_name: "Foo", last_name: "Bar"
end
Et ensuite, dans le terminal:
rake example:create_user
Localement, cela sera exécuté dans le contexte de votre base de développement, et s’il est exécuté sur Heroku, il sera exécuté lorsqu’il sera connecté à votre base de données de production. Je trouve cela particulièrement utile pour faciliter les migrations ou les tables modifiées.