2017-05-28 2 views
0

J'utilise la gemine sidekiq scheduler pour planifier et exécuter des tâches en arrière-plan. La configuration fonctionne correctement et les tâches sont planifiées et exécutées correctement, cependant, si je veux exécuter des méthodes à l'intérieur de mes modèles de rails, je ne peux pas. Voici comment je lance sidekiq:Impossible d'appeler les modèles Rails à l'intérieur de la classe de travailleurs Sidekiq

sidekiq -r ./app/workers/get_new_users.rb -e production 

Comment puis-je obtenir mon script get_new_users d'appeler des méthodes dans mes modèles?

require 'sidekiq-scheduler' 


class GetNewUsers 
    include Sidekiq::Worker 


    def perform 
    puts User.find(1) 
    end 
end 

Merci

+0

Qu'entendez-vous exactement par «les méthodes de fonctionnement depuis l'intérieur de mes modèles»? Si vous passez par exemple l'ID d'un modèle à votre worker, vous devriez être capable de vous instancier rmodels comme: User.find (id) et les méthodes d'appel à ce sujet. Ce – trueunlessfalse

+0

est une faute de frappe que je voulais dire appeler au lieu de courir :) Quand j'appelle User.find (id) Je reçois cette erreur: NameError: non initialisées GetNewUsers constante :: L'utilisateur – rubyist

+0

Pouvez-vous montrer le code pour le travailleur – Iceman

Répondre

2

drop juste le paramètre -r et sidekiq chargera alors l'environnement de vos rails (lire: tous vos modèles et autres)

Vous pouvez également déposer -e (qui sera ensuite prise de RAILS_ENV env var, qui devrait être défini de toute façon).

Et c'est une bonne idée d'exécuter vos binaires via bundler. Donc, votre commande devient juste ceci:

bundle exec sidekiq 
+0

Merci! Cela a fonctionné, j'ai mis le commutateur -r quand j'ai ajouté la gemme de planificateur dans ceci est venu de la documentation. – rubyist