2010-04-21 9 views
9

J'essaye d'écrire une tâche de rake qui mettra en place un environnement reflétant mon projet.Comment démarrer la console IRB à partir d'une tâche rake?

task :environment do 
    require 'rubygems' 
    require 'sequel' 
    # require 'my_projects_special_files' 
end 

task :foo => [:environment] do 
    require 'irb' 
    IRB.start 
end 

Conduit à iRB se plaignant que « foo » n'existe pas (le nom de la tâche)

 
10:28:01:irb_test >> rake foo --trace 
(in /Users/mwlang/projects/personal/rake/irb_test) 
** Invoke foo (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute foo 
rake aborted! 
No such file or directory - foo 
/opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `initialize' 
/opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `open' 
/opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `initialize' 
/opt/local/lib/ruby/1.8/irb/context.rb:80:in `new' 
/opt/local/lib/ruby/1.8/irb/context.rb:80:in `initialize' 
/opt/local/lib/ruby/1.8/irb.rb:92:in `new' 
/opt/local/lib/ruby/1.8/irb.rb:92:in `initialize' 
/opt/local/lib/ruby/1.8/irb.rb:57:in `new' 
/opt/local/lib/ruby/1.8/irb.rb:57:in `start' 
/Users/mwlang/projects/personal/rake/irb_test/Rakefile:9 

Répondre

30

IRB.start est à la recherche à ARGV qui contient le nom de la tâche (s) à partir de la ligne de commande de coupe. Essayez d'effacer ARGV en premier.

require 'irb' 
ARGV.clear 
IRB.start 
+0

C'était en effet le problème! Merci d'avoir répondu –

+0

Merci aussi! @ MichaelLang vous devriez déjà accepter cette réponse. –

+0

Il existe un moyen plus simple de faire cela dans Ruby 2.4.0; vois ma réponse. –

0

Apparemment, il doit y avoir un problème avec la façon dont vous avez défini votre tâche. Qu'est-ce qui se passe si vous changez

task :foo => [:environment] do 

à

task :foo => :environment do 
+0

Même chose si je [: environnement], juste: l'environnement, ou rien du tout . Si je change le nom de la tâche en "barre" alors IRB parle de "barre" non trouvé, donc c'est en quelque sorte ramasser sur le nom de la tâche et essayer de trouver un fichier ou un dossier pour cela. –

0

J'ai eu un problème similaire lors de l'exécution ma tâche comme ça. Définir la tâche par défaut a résolu le problème, mais cela n'a pas aidé avec le bug. Voici: ce que je l'ai fait

task :console do 
    exec 'irb -I lib -r startingscript.rb' 
end 
0

Le contenu du fichier Rake est ci-dessous et il est nommé Rakefile.
Lancez-le depuis le terminal avec le test de coupe: console

require 'rubygems' 
require 'rake' 

namespace :test do 
desc "Test Task" 

desc "Load stuff in IRB." 
task :console do 

    exec "irb -r rubygems -r sanitize" #require multiple gems by typing -r gemname 

end 

end 

une fois que vous avez exécuté le test de coupe: console, pops et RIR vous pouvez voir que cela fonctionne en utilisant la méthode propre de Désinfectez.
Sanitize.clean "texte"

2

À partir de Ruby 2.4.0, vous pouvez le faire:

require 'irb' 
binding.irb 
+0

bon à savoir! Je devrais probablement noter la question originale et la réponse acceptée résout pour Ruby 1.8. –