开发者

How do I start IRB console from a rake task?

I'm trying to write a rake task that will set up an environment mirroring my project.

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

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

Leads to irb complaining that "foo" doesn't exist (the name of the task)

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/开发者_如何学JAVAirb_test/Rakefile:9


IRB.start is looking at ARGV which contains the task name(s) from the rake command line. Try clearing ARGV first.

require 'irb'
ARGV.clear
IRB.start


As of Ruby 2.4.0, you can do this:

require 'irb'
binding.irb


I've had a similar problem when running my task like that. Setting it the default task solved the problem but it did not help with the bug. Here: what i did

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


The rake file contents are below and it is named Rakefile.
Run it from terminal with rake test: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

once you've executed the rake test:console, irb pops up and you can see that it works by using Sanitize's clean method.
Sanitize.clean "some text"


Apparently there must be a problem with how you defined your task. What happens if you change

task :foo => [:environment] do

to

task :foo => :environment do
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜