2009-04-12 68 views
32

所以我正在寫一個小寶石,我有一個'/任務'目錄裏面有一些特定的rake任務。我如何使這些任務自動地在任何需要寶石的地方使用?例如,我希望在安裝好gem之後,我可以在rails根目錄下運行'rake mygemrake:task'。從任何地方都可以獲得耙子任務嗎?

回答

2

查看rdoctask的耙子,瞭解如何定義由寶石提供的任務的示例。任務是紅寶石,而不是Rake構建語言來定義,可以根據需要,像這樣:

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

這就是Sake是。 Datamapper和Merb已經成功地使用了Sake。

0

您必須在應用程序的Rakefile中導入這些任務。這是它的外觀在我(我使用bundler08來管理我的寶石):

%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

對於Rails3中的應用程序,你可能要考慮作出Railtie你的寶石。

你可以這樣做有:

的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

​​

雖然,我有我的份額在我的railtie.rb中要求rake.task文件時遇到困難。我選擇在rake_tasks區塊內定義我的measley一個或兩個任務。

+0

只是警告一句話,我無法讓Rails使用這種方法要求帶'.rake`擴展名的`rake`任務。 – 2012-02-01 20:48:52

0

你可以寫一個普通的寶石耙任務,並加載它們像這樣:

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

此外,看一看thor vs. rake