DelayedJob ne semble pas sortie en cas est quelque chose de mal:
1- cours d'enregistrement non actifs doivent être requis et initialisé:
Comment: Créer un fichier con fig/initializers/load_classes_for_dj.rb Ajoutez à cela les lignes:
require 'lib/libtest/delayed_test.rb'
DelayedTest
Notez que si vous avez '# {config.root}/lib/libtest' dans config.autoload_paths dans config/application.rb, vous n'a pas besoin de faire le nécessaire.
Source: Rails Delayed Job & Library Class
2- Les classes qui mettent en œuvre le module Singleton ne fonctionnera pas en appelant: SingletonClass.instance.delay.sayhello
Pour résoudre ce problème, procédez comme suit:
class SingletonClass
include Singleton
# create a class method that does the call for you
def self.delayed_sayhello
SingletonClass.instance.sayhello
end
def sayhello
# this is how you can actually write to delayed_job.log
# https://stackoverflow.com/questions/9507765/delayed-job-not-logging
Delayed::Worker.logger.add(Logger::INFO, "hello there")
end
end
pour appeler la méthode de classe retardée, procédez comme suit:
SingletonClass.delay.delayed_sayhello
Oui, j'appelle .delay sur une classe ici.Puisque les classes dans Ruby sont aussi des objets, l'appel est valide ici et me permet d'accéder à la méthode de classe "delayed_sayhello"
3- Ne pas passer d'objets ActiveRecord ou d'objets complexes à votre appel mais plutôt passer des identifiants, chercher le objets dans la base de données dans votre méthode retardée, puis effectuez votre travail:
nE PAS fAIRE:
DelayedClass.new.delay.do_some_processing_on_album Album.first
dO ceci:
DelayedClass.new.delay.do_some_processing_on_album Album.first.id
et à l'intérieur DelayedClass do_some_processing_on_album, faire
a = Album.find_by_id id
Il y avait un poste stackoverflow sur ce que j'ai vu il y a quelque temps - pas sûr :-)
4- Pour la fin, cela est comment faire mailers (ne pas appeler la méthode livrer):
Notifier.delay.signup(user_id)
Comme par 3, ne passent pas l'objet de l'utilisateur, mais plutôt leur carte d'identité, faire la recherche dans la métho d'inscription ré.
Maintenant, une fois que vous avez vérifié que vous avez suivi les directives ci-dessus, vous pouvez utiliser:
Delayed::Worker.logger.add(Logger::INFO, "hello")
Si vous rencontrez toujours des problèmes, je vous suggère de briser votre problème:
une - Créer une nouvelle classe b- Assurez-vous que vous l'avez inclus et initialisé par étape 1 c- Ajouter l'enregistrement de l'étape 4 et essayer d'appeler MyNewClass.new.delay pour voir si cela fonctionne
J'espère que cela vous aide les gars :-)
Où avez-vous mis ce code? Sûrement pas juste dans 'environment.rb' ...? – rfunduk
Voici la pleine chose: https://gist.github.com/833828 –
Cela devrait être la réponse acceptée, car c'est la seule solution qui écrit les messages d'état du travail, toutes les requêtes SQL, ainsi que les journaux personnalisés (en utilisant 'logger.level', pas' puts') dans un fichier journal dédié à delayed_job. – samvermette