2009-04-12 9 views
32

Así que estoy escribiendo una pequeña joya y tengo un directorio '/ tasks' con algunas tareas específicas de rake. ¿Cómo hago que esas tareas estén disponibles automáticamente en todas partes, donde se requiere la gema? Por ejemplo, me gustaría poder ejecutar 'rake mygemrake: task' dentro de mi directorio raíz de rails después de instalar la gema.¿La tarea de rastrillo de la gema está disponible en todas partes?

Respuesta

2

Consulte el rdoctask en rake para ver un ejemplo de cómo definir una tarea proporcionada por una gema. La tarea se define en el rubí en lugar del idioma rastrillo de construcción y se puede requerir de este modo:

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

Eso es lo que es para Sake. Datamapper y Merb han estado usando Sake con éxito.

0

Tiene que importar esas tareas en el Rakefile de la aplicación. Así es como se ve en la mía (yo estoy usando bundler08 para gestionar mis joyas):

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

Para aplicaciones Rails3, es posible que desee ver en hacer un Railtie para su joya.

Puede hacerlo con:

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 

Aunque, tuve mi parte de dificultades al requerir el archivo rake.task en mi railtie.rb. Opté por simplemente definir mis tareas una o dos en el bloque rake_tasks.

+0

Solo una palabra de advertencia, no pude hacer que Rails requiera tareas 'rake' con una extensión' .rake' con este método. –

+0

Creo que recuerdo que el error es algo parecido a lo que se describe aquí: http://blog.smartlogicsolutions.com/2009/05/26/including-rake-file-external-in-your-projects-rakefile-keep -your-rake-tasks-organized/ quizás usar 'import' en lugar de' require' es la clave del éxito? Voy a profundizar en esta próxima oportunidad Tengo un momento libre :) –

+1

Lo que hice fue utilizar '.rb' en su lugar. Problema resuelto. :) –

0

Puede escribir las tareas normales del rastrillo para una joya y cargarlos como esto:

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

También, echar un vistazo a thor vs. rake.

Cuestiones relacionadas