2010-04-21 20 views
9

Próbuję napisać zadanie rake, które skonfiguruje środowisko odzwierciedlające mój projekt.Jak uruchomić konsolę IRB z zadania prowizji?

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

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

prowadzi do IRB twierdząc, że „foo” nie istnieje (nazwa zadania)

 
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 

Odpowiedz

30

IRB.start patrzy na ARGV, który zawiera nazwę (-y) zadanie z linii poleceń grabie. Spróbuj najpierw wyczyścić ARGV.

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

To był rzeczywiście problem! Dzięki za odpowiedź –

+0

Dzięki! @MichaelLang powinieneś już przyjąć tę odpowiedź. –

+0

Jest prostszy sposób na zrobienie tego w Ruby 2.4.0; zobacz moją odpowiedź. –

0

Widocznie nie musi być problem z tym, jak zdefiniowano swoje zadanie. Co się stanie, jeśli zmieni

task :foo => [:environment] do 

do

task :foo => :environment do 
+0

samo dzieje się, czy mam [:], tylko środowisko: Środowisko, albo w ogóle nic . Jeśli zmienię nazwę zadania na "bar", to IRB fusses o tym, że "bar" nie zostanie odnaleziony, więc w jakiś sposób podnosi nazwę zadania i próbuje znaleźć dla niego plik lub folder. –

0

miałem podobny problem, gdy uruchomiony moje zadanie takiego. Ustawienie domyślnego zadania rozwiązało problem, ale nie pomogło to w przypadku błędu. Tutaj: co zrobiłem

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

Zawartość pliku rake znajduje się poniżej i ma nazwę Rakefile.
uruchomić go z terminala z testu natarcia: konsola

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 

kiedy już wykonany test Zgrabiarka: konsolę, IRB wyskakuje i widać, że działa za pomocą czystej metody dezynfekcji za.
Sanitize.clean "jakiś tekst"

2

Jak Ruby 2.4.0, można to zrobić:

require 'irb' 
binding.irb 
+0

miło wiedzieć! Powinienem prawdopodobnie zauważyć oryginalne pytanie i zaakceptowane odpowiedzi dla Rubiego 1.8. –

Powiązane problemy