从宝石到处可以进行rake任务吗?

时间:2009-04-12 23:27:42

标签: ruby rake

所以我正在写一个小宝石,我有一个'/ tasks'目录,里面有一些特定的rake任务。如何在需要宝石的地方自动提供这些任务?例如,我希望在安装好gem后,我可以在rails root dir中运行'rake mygemrake:task'。

5 个答案:

答案 0 :(得分:23)

对于Rails3应用程序,您可能需要考虑为您的gem制作一个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

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

尽管如此,我在rake.task中要求railtie.rb文件时遇到了一些困难。我选择在rake_tasks块中定义我的一个或两个任务。

答案 1 :(得分:2)

查看rake中的rdoctask,了解如何定义gem提供的任务。该任务是用ruby而不是rake构建语言定义的,可以这样定义:

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

答案 2 :(得分:0)

这就是Sake的用途。 Datamapper和Merb一直在使用Sake。

答案 3 :(得分: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

答案 4 :(得分:0)

您可以为gem编写正常的rake任务并加载它们:

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

另外,请查看thor vs. rake