33

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

4

5 回答 5

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. 我选择只在块内定义我的 measley 一两个任务rake_tasks

于 2010-11-08T09:48:43.060 回答
2

Check out the rdoctask in rake for an example of how to define a task provided by a gem. The task is defined in ruby instead of the rake build language and can be required like so:

require 'rake'             # the gem
require 'rake/rdoctask'    # the task
于 2009-04-13T13:59:22.303 回答
0

这就是清酒的用途。Datamapper 和 Merb 一直在成功使用 Sake。

于 2009-04-15T13:43:56.707 回答
0

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

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

另外,看看thor 与 rake

于 2011-01-30T22:13:15.730 回答
0

您必须在应用程序的 Rakefile 中导入这些任务。这是我的样子(我正在使用 bundler08 来管理我的 gem):

%w(gem1 gem2 gem3).each do |g|
  Dir[File.dirname(__FILE__) + "/vendor/bundler_gems/**/#{g}*/tasks/*.rake"].each do |f|
    import f
  end
end
于 2010-07-28T16:34:09.877 回答