web-dev-qa-db-fra.com

Passer le fichier de script Ruby à la console Rails

Existe-t-il un moyen de passer le fichier Ruby, foo.rb à la console Rails. Les résultats attendus seraient après le démarrage de la console de l'environnement Rails pour exécuter le fichier. 

Ou tout autre moyen qui me permettrait d'exécuter un fichier dans l'environnement Rails, à l'aide de la commande Invite.

92
Haris Krajina

Dans l'intervalle, cette solution a été prise en charge.

Rails r PATH_TO_Ruby_FILE

Beaucoup plus simple maintenant.

32
Haris Krajina

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

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

Vous pouvez utiliser

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

METTRE À JOUR:

Nous avons également beaucoup utilisé ces derniers temps pour charger l'environnement Rails à partir du script lui-même. Considérez doit.rb:

#!/usr/bin/env Ruby

require "/path/to/Rails_app/config/environment"

# ... do your stuff

Cela fonctionne également si le script ou le répertoire de travail actuel ne se trouve pas dans le répertoire de l'application Rails.

78
moritz
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.

4
hari seldon

Parmi ces approches mentionnées précédemment, aucune ne semblait propre et idéale, contrairement à ce que l'on pourrait attendre d'un script autonome (ne pas obtenir d'évaluation ou de redirection via une redirection), mais finalement cela fonctionne parfaitement pour moi:

(pour 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 à saisir une variable irb ou Rails c interactive et tester mon script.rb à partir de l’invite du shell, avant, par exemple. la planification dans crontab.

Il prend également en charge les paramètres de ligne de commande et minimise le niveau des wrappers 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

1
Marcos

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 pour File.read est la racine du projet Rails.

Je sais que c'est une hérésie grave, utilisant python pour aider un script Ruby. Mais je ne pouvais pas trouver une méthode relpath intégrée à Ruby.

Credit: relpath() a été pris de @MestreLion, Convertissez le chemin absolu en chemin relatif avec un répertoire actuel à l'aide de Bash

0
Chaim Leib Halbert