Итак, я пишу небольшой драгоценный камень, и у меня есть каталог / tasks в нем с некоторыми конкретными задачами rake. Как сделать эти задачи доступными автоматически везде, где требуется драгоценный камень? Например, я хотел бы запустить rake mygemrake: task в моем корневом каталоге rails после установки драгоценного камня.
Сделать рейк-задание из гема доступным везде?
Ответы (5)
Для приложений 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
module YourGem
require "lib/your_gem/railtie" if defined?(Rails)
end
Хотя у меня были трудности с требованием файла rake.task
в моем railtie.rb
. Я решил просто определить одну или две задачи в блоке rake_tasks
.
rake
задачи с .rake
расширением, используя этот метод.
- person Benjamin Oakes; 02.02.2012
import
вместо require
является ключом к успеху? Я копаюсь в этот следующий шанс, у меня будет свободная минута :)
- person kelly.dunn; 02.02.2012
require
на load
: load "path/to/file.rake"
- person Guilherme Garnier; 02.07.2013
В качестве примера ознакомьтесь с rdoctask в граблях. как определить задачу, предоставляемую драгоценным камнем. Задача определяется на ruby, а не на языке сборки rake, и может потребоваться так:
require 'rake' # the gem
require 'rake/rdoctask' # the task
Вы должны импортировать эти задачи в 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
Вы можете написать обычные рейк-задачи для гема и загрузить их так:
require 'rake'
load 'path/to/your/tasks.rake'
Также обратите внимание на Тор против граблей.
Вот для чего нужен Саке. Datamapper и Merb успешно использовали саке.