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