2009-04-12 86 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