Как запустить консоль IRB из рейк-задачи?

Я пытаюсь написать задачу rake, которая создаст среду, отражающую мой проект.

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

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

Приводит к тому, что irb жалуется, что "foo" не существует (название задачи)

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

person Michael Lang    schedule 21.04.2010    source источник


Ответы (5)


IRB.start просматривает ARGV, который содержит имена задач из командной строки rake. Сначала попробуйте очистить ARGV.

require 'irb'
ARGV.clear
IRB.start
person Heath    schedule 20.05.2010
comment
Это действительно была проблема! Спасибо за ответ - person Michael Lang; 01.08.2011
comment
Тебе тоже спасибо! @MichaelLang, вы уже должны принять этот ответ. - person Dalibor Filus; 12.03.2012
comment
В Ruby 2.4.0 есть более простой способ сделать это; смотри мой ответ. - person David Grayson; 12.01.2017

Начиная с Ruby 2.4.0, вы можете сделать это:

require 'irb'
binding.irb
person David Grayson    schedule 12.01.2017
comment
приятно знать! Я, вероятно, должен отметить исходный вопрос и принятый ответ для Ruby 1.8. - person Michael Lang; 12.01.2017

У меня была аналогичная проблема при выполнении такой задачи. Установка его в качестве задачи по умолчанию решила проблему, но не помогла с ошибкой. Здесь: что я сделал

task :console do
  exec 'irb -I lib -r startingscript.rb'
end
person pastjean    schedule 01.05.2010

Содержимое файла rake находится ниже и называется Rakefile.
Запустите его с терминала с помощью 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

после того, как вы выполнили рейк-тест: появится консоль irb, и вы увидите, что она работает, используя метод очистки Sanitize.
Sanitize.clean "некоторый текст"

person jmontross    schedule 03.02.2011

Видимо, проблема в том, как вы определили свою задачу. Что будет, если вы измените

task :foo => [:environment] do

to

task :foo => :environment do
person marcgg    schedule 21.04.2010
comment
То же самое происходит независимо от того, есть ли у меня [: environment], просто: environment или вообще ничего. Если я изменю имя задачи на запрет, тогда IRB будет беспокоиться о том, что панель не найдена, поэтому он каким-то образом улавливает имя задачи и пытается найти для нее файл или папку. - person Michael Lang; 22.04.2010