what rails info how for create ruby-on-rails ruby rubygems rake

ruby-on-rails - rails - ruby gem bundle



Incluye tareas de rake en gemas (3)

1) ¿Hay un "mejor" lugar para las tareas de rake dentro de las gemas? Los he visto en /tasks , /lib/tasks , y los he visto escritos como *.rb y *.rake - no estoy seguro de cuál (si hay alguno) es ''correcto''

2) ¿Cómo los pongo a disposición de la aplicación una vez que la gema está configurada en el entorno?


En Rails 3, haces esto a través de Railties. Aquí está el código para hacerlo por una gema que acabo de hacer:

class BackupTask < Rails::Railtie rake_tasks do Dir[File.join(File.dirname(__FILE__),''tasks/*.rake'')].each { |f| load f } end end

Así que básicamente creas una clase que hereda de Rails::Railtie , luego dentro de esa clase tienes un bloque rake_tasks que carga los archivos relevantes. Debe cargar en lugar de requerir si desea usar una extensión .rake .

Descubrí que necesito especificar la ruta completa a Dir (de ahí la gimnasia File.join ). Si solo quisiera listar el archivo de forma explícita, podría load ''tasks/foo.rake'' porque el directorio /lib de mi gema estaba en la ruta de carga.


O bien /tasks y lib/tasks son un buen lugar. Uso /tasks cuando las tareas están destinadas a ser usadas para trabajar o administrar Gem, utilizo lib/tasks cuando las tareas están destinadas a ser cargadas por los usuarios de Gem.

Esto se debe a que los usuarios pueden tener algún problema al cargar archivos de ruby ​​fuera de la carpeta lib que se agrega automáticamente a la ruta de carga cuando se requiere la Gema.

Además, te sugiero que uses la extensión * .rake. Hoy en día, casi todos los IDE asocian la extensión .rake a los archivos ruby ​​y los IDE más avanzados incluso pueden analizar el contenido como scripts de rake. La extensión .rake es una mejor opción para los desarrolladores porque puede proporcionar una visión general inmediata del contenido dentro del archivo.

Acerca de su segunda pregunta, actualmente no hay forma de que Rails cargue sus tareas de rake cuando el complemento está empaquetado como Gem. Debe incluir el archivo de rake en su aplicación (en otro archivo rake o en el Rakefile principal) o clonar las tareas de rake en su proyecto.

Si instala el complemento en la carpeta del proveedor, todos los archivos *.rake en ambas tareas y los directorios lib / tasks se cargan automáticamente en su alcance Rails en las dos líneas siguientes.

Dir["#{RAILS_ROOT}/vendor/plugins/*/tasks/**/*.rake"].sort.each { |ext| load ext } Dir["#{RAILS_ROOT}/vendor/plugins/*/lib/tasks/**/*.rake"].sort.each { |ext| load ext }


para el soporte de Rails 3, la línea superior de su archivo lib / .rb puede ser:

Dir["tasks/**/*.rake"].each { |ext| load ext } if defined?(Rake)

para el soporte de Rails 2, el instalador de gem tendrá que editar su Rakefile y agregar:

Dir["#{Gem.searcher.find(''<gemname>'').full_gem_path}/lib/tasks/**/*.rake"].each { |ext| load ext }

después de las declaraciones requeridas.

NOTAS:

  • Asegúrate de reemplazar con el nombre de tu joya real.
  • Esto supone que todas las tareas de rake visibles de Rails están en lib / tasks /

No he encontrado nada más fácil todavía. ¿Comentarios?