Je voudrais exécuter une tâche rake (apn: notifications: délivrer à partir de la gemme apn_on_rails) à partir d'un delayed_job. En d'autres termes, je voudrais mettre en file d'attente un travail retardé qui appellera la tâche apn: notifications: deliver rake. J'ai trouvé ce code http://pastie.org/157390 de http://geminstallthat.wordpress.com/2008/02/25/run-rake-tasks-with-delayedjob-dj/.Comment puis-je exécuter une tâche de rake à partir d'un_delai_job
J'ajouté ce code comme DelayedRake.rb à mon répertoire 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
Tout fonctionne bien jusqu'à ce que les pistes de delayed_job et il se plaint:
[ERREUR]: tâche « : apn notifications: livrer " échoué. Ne sait pas comment créer une tâche 'apn: notifications: deliver'
Comment le signaler à apn_on_rails? J'avais essayé 'apn_on_rails_tasks' en haut de DelayedRake qui n'a rien fait. J'ai également essayé de changer le répertoire des tâches rake en ./lib/tasks/*.rake
Je suis un peu nouveau sur Ruby/Rails. Cela fonctionne sur 2.3.5 sur heroku.
Ça a bien marché! Comment envoyer des @options à la tâche? En ce moment j'appelle: – rmw
système "rake # {@ task}" pourrais-je faire le système "rake # {@ task} # {@ options}"? – rmw