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.
Dans l'intervalle, cette solution a été prise en charge.
Rails r PATH_TO_Ruby_FILE
Beaucoup plus simple maintenant.
En fait, le moyen le plus simple est de l’exécuter avec load
dans le Rails console
load './path/to/foo.rb'
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.
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.
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
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