ruby rake

ruby - ¿La tarea de rastrillo de la gema está disponible en todas partes?



rake (5)

Eche un vistazo a la rdoctask en rastrillo para ver un ejemplo de cómo definir una tarea proporcionada por una gema. La tarea se define en ruby ​​en lugar del lenguaje de generación de rake y se puede solicitar de la siguiente manera:

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

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.


Para eso está Sake . Datamapper y Merb han estado usando Sake con éxito.


Para las aplicaciones de Rails3, es posible que desee considerar hacer un Railtie para su gema.

Puedes 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

Sin embargo, tuve rake.task dificultades para requerir el archivo rake.task en mi railtie.rb . Opté por simplemente definir mi una o dos tareas dentro del bloque rake_tasks .


Puedes escribir tareas normales de rastrillo para una gema y cargarlas así:

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

Además, eche un vistazo a thor vs. rake .


Tienes que importar esas tareas en el Rakefile de la aplicación. Así es como se ve en el mío (estoy usando bundler08 para administrar mis gemas):

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