Pregunta

Tengo un modelo, llamémosle Foobar. Quiero ser capaz de ejecutar una tarea programada para actualizar un atributo de todos los objetos que son instancias de Foobar. Así, en pseudocódigo, que podría ser algo como esto:

Foobar.all.each do |foobar|
  foobar.update_attributes({:my_attribute => 'updated'});
end

Ahora, digamos que envuelvo en un método de clase llamado Foobar.run_update ().

Llamando Foobar.run_update () que funcionan bien desde el controlador, o incluso desde un punto de vista. Pero, lo que yo quiero hacer es run_update run () de la Rakefile para que pueda atarlo a correr cron. Sin embargo, la clase Foobar no está disponible para Rake cuando se le llama desde crontab.

¿Cómo puedo resolver esto? ¿Cómo puedo acceder a los métodos de la clase de Foobars de rastrillo, rastrillo cuando se llama desde cron?

Muchas gracias por su ayuda.

¿Fue útil?

Solución

Se puede cargar el entorno de Rails exigiendo config / environment.rb

ENV["RAILS_ENV"] ||= "production"
require '/where/your/rails/project/is/config/environment.rb'

Otros consejos

Por rastrillo, si se refiere a una tarea rake a continuación, añadir cargas => :environment los carriles de medio ambiente para la tarea y que sea capaz de llamar al método Foobar.run_update allí. Al igual que,

namespace :foobar do
  task :update => :environment do
    Foobar.run_update
  end
end 

Y que sólo debe ser capaz de llamar rake foobar:update desde la consola y lo han programado como una tarea programada.

En mi Sinatra aplicaciones que normalmente tienen los models/init.rb archivo que requiere Sequel, conjuntos mi conexión DB, y luego utiliza require_relative para requerir que todos mis archivos de modelo. Mi principal aplicación a continuación, hace require_relative "models/init".

Con esta configuración cualquier otro script (incluyendo IRB) todo lo que tiene que hacer es requerir el archivo models/init.rb mí mismo, y tener pleno acceso a los mismos modelos y conexión DB que la aplicación tiene.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top