2012-01-08 45 views

Trả lời

15

task phải được xác định làm tham số cho khối nhiệm vụ.

desc "Populate DB" 
task :populate do |task| 
    puts task.comment # "Populate DB" 
    puts task.full_comment # "Populate DB" 
    puts task.name # "populate " 
end 

Edit: giải pháp này làm việc với cào 0.8.7. Ít nhất rake 0.9.2.2 cần thêm Rake::TaskManager.record_task_metadata = true (Tôi chỉ kiểm tra hai phiên bản này).

Một đứng một mình ruby-script với thích ứng:

gem 'rake' #'= 0.9.2.2' 
require 'rake' 

#Needed for rake/gem '= 0.9.2.2' 
Rake::TaskManager.record_task_metadata = true 

desc "Populate DB" 
task :populate do |task| 
    p task.comment # "Populate DB" 
    p task.full_comment # "Populate DB" 
    p task.name # "populate " 
end 

if $0 == __FILE__ 
    Rake.application['populate'].invoke() #all tasks 
end 

Lý do: trong rake/task_manager.rb dòng 30 (cào 0.9.2.2) là một tấm séc

if Rake::TaskManager.record_task_metadata 
    add_location(task) 
    task.add_description(get_description(task)) 
    end 

Giá trị mặc định false được đặt trong dòng 305

+1

'task.comment' dường như được trở về' nil' cho tôi. Ý tưởng nào? –

+0

Ví dụ phù hợp với tôi. Bạn sử dụng phiên bản nào? Tôi có ruby ​​1.9.2 và 'RAKEVERSION = '0.8.7'' – knut

+0

Tôi cập nhật rake của tôi thành' 0.9.2.2' - bây giờ tôi nhận được' nil' cho 'task.comment' và' task.full_comment'. – knut

0

Có vấn đề tương tự, tôi muốn hiển thị cho người dùng màn hình trợ giúp được tùy chỉnh. Câu trả lời ở đây đã giúp tôi rất nhiều.

Điều rất quan trọng mà

Rake::TaskManager.record_task_metadata = true 

được thực hiện trước khi định nghĩa đầu tiên của nhiệm vụ.

Sau đó, bạn có thể làm

Rake.application.tasks.each do |t| 
    printf("%-}s # %s\n", 
      t.name_with_args, 
      t.comment) 
    end 

chi tiết có thể được tìm thấy bằng cách điều tra https://github.com/jimweirich/rake/blob/master/lib/rake/application.rb#L284

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