145 votes

Passer le fichier ruby script à la console de rails

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

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

0 votes

1voto

Marcos Points 942

Parmi ces approches mentionnées précédemment, aucune ne semblait propre et idéale comme on s'attendrait à ce qu'un script autonome s'exécute (ne pas être évalué ou canalisé via une < redirection), mais finalement cela fonctionne parfaitement pour moi :

(pour Rails 3)

Insérer 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 entendu, définissez votre propre chemin d'accès à l'application Rails dans la ligne APP_PATH.

De cette façon, je peux éviter d'avoir à entrer des données interactives. irb o rails c et peut tester mon script.rb à partir de l'invite du shell, avant de le programmer dans la crontab.

Il prend également en charge les paramètres de la ligne de commande et minimise les niveaux d'enveloppes avant d'atteindre votre code.

CREDIT (montre également un exemple Rails 2)

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

0voto

Voici la méthode 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}')";}

Ejemplo:

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

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

Je sais que c'est une sérieuse hérésie, utiliser python pour aider un script ruby. Mais je n'ai pas pu trouver un relpath intégrée à Ruby.

Crédit : relpath() a été pris de @MestreLion, Convertir un chemin absolu en chemin relatif à partir d'un répertoire courant en utilisant Bash

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X