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


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.


32
2018-04-12 23:27


origen


Respuestas:


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 mi parte de dificultades con la necesidad de rake.task archivo en mi railtie.rb. Opté por simplemente definir mis tareas de uno o dos dentro de rake_tasks bloquear.


23
2017-11-08 09:48



Revisar la rdoctask en rastrillo para un ejemplo de cómo definir una tarea provista 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

2
2018-04-13 13:59



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

0
2017-07-28 16:34



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.


0
2018-01-30 22:13



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


0
2018-04-15 13:43