Passer le fichier script ruby ​​à la console des rails

Existe-t-il un moyen de transmettre le fichier ruby, foo.rb aux rails de la console. Les résultats attendus seraient après que la console ait démarré l’environnement des rails pour exécuter le fichier.

Ou tout autre moyen qui me permettrait d’exécuter un fichier dans un environnement de rails, déclenché à partir d’une invite de commande.

En fait, le moyen le plus simple est de l’exécuter avec une load dans la rails console

  load './path/to/foo.rb' 

Vous pouvez utiliser

 bundle exec rails runner "eval(File.read 'your_script.rb')" 

METTRE À JOUR:

Ce que nous avons également beaucoup utilisé ces derniers temps, c’est de charger l’environnement des rails depuis le script lui-même. Considérez doit.rb :

 #!/usr/bin/env ruby require "/path/to/rails_app/config/environment" # ... do your stuff 

En attendant, cette solution a été prise en charge.

 rails r PATH_TO_RUBY_FILE 

Beaucoup plus simple maintenant.

 script/console --irb=pry < test.rb > test.log 

simple, sale, et bloquer le processus à la fin, mais il fait le travail exactement comme je le voulais.

Envisagez de créer une tâche de râteau.

Pour le code dont j’ai besoin pour créer des enregistrements ou prendre en charge les migrations, par exemple, je crée souvent une tâche similaire à celle-ci à partir de cette réponse . Par exemple:

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 puis dans le terminal exécuter:

 rake example:create_user 

Parmi ces approches mentionnées ci-dessus, aucune ne semblait propre et idéale, comme vous vous attendez à ce qu’un script autonome soit exécuté (ne pas être évalué ou redirigé via

(pour les rails 3)

Insérez en haut de votre script:

 #!/usr/bin/env ruby APP_PATH = File.expand_path(appdir = '/srv/staging/strat/fundmgr/config/application', __FILE__) require File.expand_path(appdir + '/../boot', __FILE__) require APP_PATH # set Rails.env here if desired Rails.application.require_environment! # your code here... 

Bien sûr, définissez votre propre chemin d’application Rails dans la ligne APP_PATH.

De cette façon, je peux éviter d’avoir à entrer un irb ou des rails c interactifs rails c et à tester mon script.rb à partir de l’invite du shell, par ex. la planification dans crontab.

Il prend également en charge les parameters de ligne de commande et minimise les niveaux d’encapsuleur avant d’obtenir votre code.

CREDIT (montre également un exemple de Rails 2)

http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html

Voici le hack que j’utilise:

 rr() { rails_root="$(bundle exec rails runner "puts Rails.root")" rp="$(relpath "$1" "$rails_root")" bundle exec rails runner "eval(File.read '$rp')" } relpath() {python -c "import os.path; print os.path.relpath('$1','${2:-$PWD}')";} 

Exemple:

 cd ~/rails_project/app/helpers rr my_script.rb 

Basé sur la réponse de @ moritz ici. Je l’ai changé, car le répertoire de travail de File.read est la racine du projet Rails.

Je sais que c’est une hérésie sérieuse, en utilisant Python pour aider un script Ruby. Mais je ne pouvais pas trouver une méthode relpath intégrée à relpath .

Crédit: relpath() été pris à partir de @MestreLion, Convertir le chemin absolu en chemin relatif avec un répertoire courant à l’aide de Bash