Итак, я пишу небольшой драгоценный камень, и у меня есть директория '/tasks' с некоторыми конкретными задачами rake. Как сделать эти задачи доступными автоматически везде, где требуется драгоценный камень? Например, мне хотелось бы запустить "rake mygemrake: task" внутри моего корневого каталога rails после того, как у меня установлен gem.
Сделать рейк-задачу из драгоценного камня, доступного повсюду?
Ответ 1
Для приложений Rails3 вы можете захотеть задуматься о создании Railtie для вашего драгоценного камня.
Вы можете сделать это с помощью
Библиотека /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
Библиотека /your _gem.rb
module YourGem
require "lib/your_gem/railtie" if defined?(Rails)
end
Хотя, у меня была своя доля трудностей с требованием файла rake.task
в моем railtie.rb
. Я решил просто определить мои меры для выполнения одной или двух задач в блоке rake_tasks
.
Ответ 2
Просмотрите rdoctask в графе для примера того, как определить задачу, предоставленную драгоценным камнем. Задача определяется в рубине вместо языка сборки гребня и может потребоваться так:
require 'rake' # the gem
require 'rake/rdoctask' # the task
Ответ 3
Вы не можете этого сделать. По крайней мере, не с Рейком. Но это то, что для Sake. Datamapper и Merb с большим успехом используют Sake.
Ответ 4
Вам нужно импортировать эти задачи в 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
Ответ 5
Вы можете написать обычные задачи рейка для драгоценного камня и загрузить их следующим образом:
require 'rake'
load 'path/to/your/tasks.rake'
Кроме того, посмотрите thor vs. rake.