2010-04-21 23 views
9

Tôi đang cố gắng viết một công việc cào sẽ thiết lập một môi trường phản chiếu dự án của tôi.Làm cách nào để bắt đầu bàn điều khiển IRB từ một tác vụ cào?

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

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

Dẫn đến IRB phàn nàn rằng "foo" không tồn tại (tên của nhiệm vụ)

 
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 

Trả lời

30

IRB.start đang xem ARGV có chứa tên tác vụ từ dòng lệnh rake. Hãy thử xóa ARGV trước.

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

Đó thực sự là vấn đề! Cảm ơn bạn đã trả lời –

+0

Cảm ơn bạn! @MichaelLang bạn nên chấp nhận câu trả lời này rồi. –

+0

Có một cách đơn giản hơn để thực hiện việc này trong Ruby 2.4.0; xem câu trả lời của tôi –

0

Rõ ràng phải có một vấn đề với cách bạn định nghĩa nhiệm vụ của bạn. Chuyện gì xảy ra nếu bạn thay đổi

task :foo => [:environment] do 

để

task :foo => :environment do 
+0

Cùng một điều sẽ xảy ra cho dù tôi có [: môi trường], chỉ cần: môi trường, hoặc không có gì cả . Nếu tôi thay đổi tên của nhiệm vụ thành "bar" thì IRB sẽ lo ngại về "bar" không được tìm thấy, do đó, bằng cách nào đó nó sẽ chọn tên tác vụ và tìm một tập tin hoặc thư mục cho nó. –

0

Tôi đã có một vấn đề tương tự khi chạy nhiệm vụ của tôi như thế. Đặt nó là tác vụ mặc định đã giải quyết được vấn đề nhưng nó không giúp được lỗi. Ở đây: những gì tôi đã làm

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

Nội dung tệp cào bên dưới và được đặt tên là Rakefile.
Run nó từ thiết bị đầu cuối với thử nghiệm cào: 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 

khi bạn đã thực hiện các thử nghiệm cào: giao diện điều khiển, pops IRB lên và bạn có thể thấy rằng nó hoạt động bằng cách sử dụng phương pháp sạch Sanitize của.
Sanitize.clean "một số văn bản"

2

Như của Ruby 2.4.0, bạn có thể làm điều này:

require 'irb' 
binding.irb 
+0

rất vui được biết! Tôi có lẽ nên lưu ý câu hỏi ban đầu và chấp nhận câu trả lời giải quyết cho Ruby 1.8. –

Các vấn đề liên quan