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

202voto

Adrian Points 466

En fait, le moyen le plus simple est de l'exécuter avec load à l'intérieur de la rails console

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

6 votes

Cela fonctionne très bien. Mais à moins que je ne fasse quelque chose de mal, vous n'avez pas accès aux objets créés à l'intérieur du script. Y a-t-il un moyen de le faire ? Le cas d'utilisation est de mettre en place certains objets, puis de les explorer de manière interactive. Est-ce possible ?

1 votes

@DanBarron vous pouvez mettre dans un débogueur ou binding.pry

0 votes

C'est exactement comme un REPL Lisp +1

97voto

Haris Krajina Points 3051

Entre-temps, cette solution a été soutenue.

rails r PATH_TO_RUBY_FILE

C'est beaucoup plus simple maintenant.

97voto

moritz Points 9491

Vous pouvez utiliser

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

UPDATE :

Ce que nous utilisons aussi beaucoup ces derniers temps, c'est de charger l'environnement rails à partir du script lui-même. Considérons 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 trouvent pas dans le répertoire de l'application rails.

0 votes

Merci beaucoup, ça fait du bien ! J'utilise Sublime Text 2 et maintenant je vais pouvoir déclencher des constructions de classes de rails et voir le résultat directement dans l'IDE :)

2 votes

Script/runner "eval(File.read 'your_script.rb')" pour rails 2.3 :)

2 votes

Vous pouvez utiliser un modèle similaire pour exécuter des fichiers dans la console : f=File.new('path/to/file') pour l'utiliser : f.rewind; eval f.readlines.join("\n");

6voto

Matt Points 34

Envisagez de créer une tâche de ratissage.

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

Sur 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
end

Et ensuite, dans le terminal, exécutez :

rake example:create_user

5voto

hari seldon Points 21
script/console --irb=pry < test.rb > test.log

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

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