Me gustaría ejecutar una tarea de rake (apn: notificaciones: entregar desde la joya apn_on_rails) desde un trabajo retrasado. En otras palabras, me gustaría poner en cola un trabajo retrasado que llamará a la API: notificaciones: entregar tareas de rake.¿Cómo puedo ejecutar una tarea de rake desde un trabajo retrasado?
Encontré este código http://pastie.org/157390 de http://geminstallthat.wordpress.com/2008/02/25/run-rake-tasks-with-delayedjob-dj/.
que añade este código como DelayedRake.rb a mi directorio lib:
require 'rake'
require 'fileutils'
class DelayedRake
def initialize(task, options = {})
@task = task
@options = options
end
##
# Called by Delayed::Job.
def perform
FileUtils.cd RAILS_ROOT
@rake = Rake::Application.new
Rake.application = @rake
### Load all the Rake Tasks.
Dir[ "./lib/tasks/**/*.rake" ].each { |ext| load ext }
@options.stringify_keys!.each do |key, value|
ENV[key] = value
end
begin
@rake[@task].invoke
rescue => e
RAILS_DEFAULT_LOGGER.error "[ERROR]: task \"#{@task}\" failed. #{e}"
end
end
end
Todo funciona bien hasta que se ejecuta el delayed_job y se queja:
[ERROR]: tareas "APN: notificaciones: entregas " ha fallado. No sé cómo compilar la tarea 'apn: notificaciones: entregar'
¿Cómo puedo informarle sobre apn_on_rails? Intenté requerir 'apn_on_rails_tasks' en la parte superior de DelayedRake, que no hizo nada. También traté de cambiar el directorio de tareas de rake a ./lib/tasks/*.rake
Soy un poco nuevo en Ruby/Rails. Esto se ejecuta en 2.3.5 en heroku.
¡Funcionó muy bien! ¿Cómo enviaría @options a la tarea? En este momento estoy llamando: – rmw
sistema "rake # {@ task}" ¿podría hacer el sistema "rake # {@ task} # {@ options}"? – rmw