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