Сделать рейк-задание из гема доступным везде?

Итак, я пишу небольшой драгоценный камень, и у меня есть каталог / tasks в нем с некоторыми конкретными задачами rake. Как сделать эти задачи доступными автоматически везде, где требуется драгоценный камень? Например, я хотел бы запустить rake mygemrake: task в моем корневом каталоге rails после установки драгоценного камня.


person snitko    schedule 12.04.2009    source источник


Ответы (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.

person kelly.dunn    schedule 08.11.2010
comment
Небольшое предупреждение, я не смог заставить Rails требовать rake задачи с .rake расширением, используя этот метод. - person Benjamin Oakes; 02.02.2012
comment
Думаю, я помню, что ошибка была чем-то вроде того, что описано здесь: blog.smartlogicsolutions.com/2009/05/26/ возможно, использование import вместо require является ключом к успеху? Я копаюсь в этот следующий шанс, у меня будет свободная минута :) - person kelly.dunn; 02.02.2012
comment
@BenjaminOakes вы также можете заменить require на load: load "path/to/file.rake" - person Guilherme Garnier; 02.07.2013
comment
Привет всем, есть ли способ создать задачу с граблями, не требуя рельсов? - person nisevi; 17.02.2018
comment
@nisevi прекрасно создать задачу rake без использования Rails, например github.com/kjvarga/sitemap_generator/blob/master/lib/ - person lulalala; 02.03.2018

В качестве примера ознакомьтесь с rdoctask в граблях. как определить задачу, предоставляемую драгоценным камнем. Задача определяется на ruby, а не на языке сборки rake, и может потребоваться так:

require 'rake'             # the gem
require 'rake/rdoctask'    # the task
person dstnbrkr    schedule 13.04.2009

Вы должны импортировать эти задачи в 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
person skalee    schedule 28.07.2010

Вы можете написать обычные рейк-задачи для гема и загрузить их так:

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

Также обратите внимание на Тор против граблей.

person Markus    schedule 30.01.2011

Вот для чего нужен Саке. Datamapper и Merb успешно использовали саке.

person Bob Aman    schedule 15.04.2009