2010-04-21 107 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