web-dev-qa-db-fra.com

Comment exécuter un fichier Ruby dans un environnement Rails?

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?

90
weicool

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

111
Ryan Porter

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
32
iltempo

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! }
-------------------------------------------------------------
22
colsen

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.

5
Matt