28 votes

Rendre la tâche rake de la gemme disponible partout ?

Je suis donc en train d'écrire une petite gemme et j'ai un répertoire '/tasks' dans lequel se trouvent certaines tâches spécifiques de rake. Comment puis-je rendre ces tâches disponibles automatiquement partout où la gemme est requise ? Par exemple, j'aimerais pouvoir exécuter 'rake mygemrake:task' dans mon répertoire racine de rails après avoir installé la gemme.

21voto

kelly.dunn Points 696

Pour les applications Rails3, vous pouvez envisager de créer une Railtie pour votre gemme.

Vous pouvez le faire avec :

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

Bien que j'aie eu ma part de difficultés à exiger que le rake.task dans mon railtie.rb . J'ai choisi de ne définir qu'une ou deux maigres tâches dans le cadre de l'initiative de l'UE. rake_tasks bloc.

3voto

dstnbrkr Points 2974

Consultez le rdoctask dans rake pour un exemple de la façon de définir une tâche fournie par une gemme. La tâche est définie en ruby au lieu du langage de construction rake et peut être requise comme suit :

require 'rake'             # the gem
require 'rake/rdoctask'    # the task

1voto

Bob Aman Points 19110

C'est ce que Sake est pour. Datamapper et Merb ont utilisé Sake avec succès.

0voto

skalee Points 3227

Vous devez importer ces tâches dans le Rakefile de l'application. Voici comment cela se présente dans le mien (j'utilise bundler08 pour gérer mes gems) :

%w(gem1 gem2 gem3).each do |g|
  Dir[File.dirname(__FILE__) + "/vendor/bundler_gems/**/#{g}*/tasks/*.rake"].each do |f|
    import f
  end
end

0voto

Markus Points 155

Vous pouvez écrire des tâches rake normales pour une gemme et les charger comme ceci :

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

Jetez également un coup d'œil à thor contre rake .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X