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