2010-04-21 102 views
9

我正在嘗試編寫一個rake任務,它將設置鏡像我的項目的環境。如何從rake任務啓動IRB控制檯?

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

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

引出IRB抱怨說,「富」不存在(任務名稱)

 
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 

回答

30

IRB.start正在查看ARGV,其中包含來自耙式命令行的任務名稱。嘗試先清除ARGV。

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

確實是這個問題!感謝您的回答 – 2011-08-01 14:42:47

+0

也謝謝! @MichaelLang你應該已經接受了這個答案。 – 2012-03-12 11:18:55

+0

在Ruby 2.4.0中有更直接的方法來做到這一點;看到我的答案。 – 2017-01-12 03:11:19

0

顯然都必須有你如何定義你的任務問題。如果你改變

task :foo => [:environment] do 

task :foo => :environment do 
+0

同樣的事情發生我是否有[:環境],只是:環境,或什麼都沒有。如果我將任務的名稱更改爲「bar」,那麼IRB就會發現「bar」未找到,因此它以某種方式獲取任務名稱並嘗試爲其找到文件或文件夾。 – 2010-04-22 13:38:54

0

運行我的任務一樣,我也有過類似的問題,會發生什麼。將它設置爲默認任務解決了問題,但它並沒有幫助錯誤。這裏:我做了什麼

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

rake文件內容如下,它被命名爲Rakefile。從耙測試終端
運行:控制檯

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 

一旦你執行耙測試:控制檯,IRB彈出,你可以看到,它的工作原理是使用消毒的清潔方法。
Sanitize.clean 「一些文本」

2

隨着Ruby 2.4.0的,你可以這樣做:

require 'irb' 
binding.irb 
+0

很高興知道!我應該注意Ruby 1.8的原始問題和接受的答案。 – 2017-01-12 19:40:10