2010-04-21 6 views
9

Estoy tratando de escribir una tarea de rake que configurará un entorno que refleje mi proyecto.¿Cómo comienzo la consola IRB desde una tarea de rake?

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

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

Conduce a IRB quejándose de que "foo" no existe (el nombre de la tarea)

 
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 

Respuesta

30

IRB.start está mirando ARGV que contiene el nombre (s) tarea desde la línea de comandos rastrillo. Intente borrar ARGV primero.

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

¡Ese fue de hecho el problema! Gracias por responder –

+0

¡Gracias también! @MichaelLang ya deberías aceptar esta respuesta. –

+0

Hay una manera más directa de hacer esto en Ruby 2.4.0; ver mi respuesta –

0

Al parecer, tiene que haber un problema con la forma en que ha definido su tarea. ¿Qué ocurre si cambia

task :foo => [:environment] do 

a

task :foo => :environment do 
+0

Lo mismo sucede si tengo [: medio ambiente], simplemente: medio ambiente, o nada en absoluto . Si cambio el nombre de la tarea a "barra", entonces IRB se queja de que no se encuentra "barra", por lo que de alguna manera está recogiendo el nombre de la tarea y tratando de encontrar un archivo o carpeta para ella. –

0

He tenido un problema similar cuando se ejecuta mi tarea como esa. Establecerlo como la tarea predeterminada resolvió el problema, pero no ayudó con el error. Aquí: lo que hice

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

El contenido del archivo de rastreo está a continuación y se llama Rakefile.
ejecutarlo desde la terminal con la prueba de desprendimiento: la consola

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 

una vez que haya ejecutado la prueba de desprendimiento: la consola, estallidos IRB y se puede ver que funciona mediante el uso de limpieza método de Desinfección.
Sanitize.clean "algún texto"

2

A partir de Rubí 2.4.0, usted puede hacer esto:

require 'irb' 
binding.irb 
+0

¡Qué gusto! Probablemente debería notar que la pregunta original y la respuesta aceptada resuelven para Ruby 1.8. –

Cuestiones relacionadas