2009-04-12 29 views
32

Vì vậy, tôi đang viết một viên đá quý nhỏ và tôi có một '/ nhiệm vụ' dir trong đó với một số nhiệm vụ cào cụ thể. Làm cách nào để tôi thực hiện các tác vụ đó tự động ở mọi nơi, trong đó đá quý là bắt buộc? Ví dụ tôi muốn tôi có thể chạy 'rake mygemrake: task' bên trong thư mục gốc của đường ray sau khi đã cài đặt gem.Làm cho rake nhiệm vụ từ đá quý có sẵn ở khắp mọi nơi?

Trả lời

2

Kiểm tra rdoctask trong cào để biết ví dụ về cách xác định tác vụ do đá quý cung cấp. Nhiệm vụ được định nghĩa trong ruby ​​thay vì cào xây dựng ngôn ngữ và có thể được yêu cầu như vậy:

require 'rake'    # the gem 
require 'rake/rdoctask' # the task 
0

Đó là Sake là để làm gì. Datamapper và Merb đã sử dụng Sake với thành công.

0

Bạn phải nhập các tác vụ đó vào Rakefile của ứng dụng. Đây là cách nó sẽ tìm trong mỏ (Tôi đang sử dụng để quản lý bundler08 đá quý của tôi):

%w(gem1 gem2 gem3).each do |g| 
    Dir[File.dirname(__FILE__) + "/vendor/bundler_gems/**/#{g}*/tasks/*.rake"].each do |f| 
    import f 
    end 
end 
23

Đối với các ứng dụng Rails3, bạn có thể muốn xem xét thực hiện một Railtie cho đá quý của bạn.

Bạn có thể làm như vậy với:

lib/your_gem/railtie.rb

require 'your_gem' 
require 'rails' 
module YourGem 
    class Railtie < Rails::Railtie 
    rake_tasks do 
     require 'path/to/rake.task' 
    end 
    end 
end 

lib/your_gem.rb

module YourGem 
    require "lib/your_gem/railtie" if defined?(Rails) 
end 

Mặc dù, tôi đã chia sẻ của tôi khó khăn khi yêu cầu tệp rake.task trong số railtie.rb của tôi. Tôi đã chọn chỉ xác định một hoặc hai nhiệm vụ của tôi trong khối rake_tasks.

+0

Chỉ một lời cảnh báo, tôi không thể yêu cầu Rails yêu cầu các tác vụ 'rake' với phần mở rộng' .rake' bằng phương pháp này. –

+0

Tôi nghĩ rằng tôi nhớ lỗi này giống như được mô tả ở đây: http://blog.smartlogicsolutions.com/2009/05/26/including-external-rake-files-in-your-projects-rakefile-keep -your-rake-tasks-held/ có lẽ sử dụng 'import' thay vì' require' là chìa khóa để thành công? Tôi sẽ đào sâu vào cơ hội tiếp theo này, tôi nhận được một khoảnh khắc miễn phí :) –

+1

Những gì tôi đã làm là sử dụng '.rb' để thay thế. Đã giải quyết được sự cố. :) –

0

Bạn có thể viết công việc cào bình thường đối với một viên ngọc và tải chúng như thế này:

require 'rake' 
load 'path/to/your/tasks.rake' 

Ngoài ra, hãy nhìn vào thor vs. rake.

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