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
精彩评论