rails ejemplos ruby-on-rails activerecord rake task

ruby-on-rails - ejemplos - schedule cron rails



¿Las tareas de rake rieles proporcionan acceso a los modelos ActiveRecord? (5)

Estoy tratando de crear una tarea de rastrillo personalizada, pero parece que no tengo acceso a mis modelos. Pensé que esto era algo implícitamente incluido en la tarea de rieles.

Tengo el siguiente código en lib / tasks / test.rake:

namespace :test do task :new_task do puts Parent.all.inspect end end

Y aquí es cómo se ve mi modelo de padre:

class Parent < ActiveRecord::Base has_many :children end

Es un ejemplo bastante simple, pero me sale el siguiente error:

/> rake test:new_task (in /Users/arash/Documents/dev/soft_deletes) rake aborted! uninitialized constant Parent (See full trace by running task with --trace)

¿Algunas ideas? Gracias


Con la nueva sintaxis de hash ruby ​​(Ruby 1.9), el entorno se agregará así a la tarea de rake:

namespace :test do task new_task: :environment do puts Parent.all.inspect end end


Cuando comience a escribir sus tareas de rake , use un generador para apagarlas por usted.

Por ejemplo:

rails g task my_tasks task_one task_two task_three

Obtendrás un código auxiliar creado en lib / tasks llamado my_tasks.rake (obviamente, usa tu propio espacio de nombres) que se verá así:

namespace :my_tasks do desc "TODO" task :task_one => :environment do end desc "TODO" task :task_two => :environment do end desc "TODO" task :task_three => :environment do end end

Todos los modelos de rieles, etc. estarán disponibles para el entorno actual desde cada bloque de tareas, a menos que esté utilizando el entorno de producción , en cuyo caso deberá requerir los modelos específicos que desea usar. Haz esto dentro del cuerpo de la tarea. (IIRC esto varía entre las diferentes versiones de Rails.)


Es posible que deba requerir su configuración (que debe especificar todos sus modelos requeridos, etc.)

p.ej:

require ''config/environment''

alternativamente, puede requerir cada uno por separado, pero es posible que tenga problemas de entorno no configurados, etc.)


La dependencia del entorno se llama correctamente, pero es posible que el rake aún no sepa sobre otras gemas de las que dependen sus modelos, en uno de mis casos, "protected_attributes".

La respuesta es correr:

bundle exec rake test:new_task

Esto garantiza que el entorno incluya las gemas especificadas en su Gemfile.


Lo descubrí, la tarea debería verse como:

namespace :test do task :new_task => :environment do puts Parent.all.inspect end end

Observe la dependencia del => :environment agregada a la tarea