2017-02-28 2 views
0

J'ai un travail actif qui est planifiée tous les jours à 03 heures.L'application est un SAAS chaque sous-domaine a un fuseau horaire différent. Ce que je demande est comment faire le travail d'arrière-plan s'exécute tous les 3 heures du matin selon le fuseau horaire de chaque compagnie pas une fois au moment du serveur. J'ai dans mon DB l'attribut timezone, chaque entreprise peut insérer son propre.Rails travail actif exécuter quotidiennement à un moment spécifique en fonction du fuseau horaire

j'ai dans mon sidekiq_schedule.yml

schedule_foo_job: 
    cron: "0 3 * * *" 
    class: "FooJob" 
    queue: default 
    active_job: true 

Et dans le fichier d'emploi

class FooJob < ApplicationJob 
    queue_as :default 

    def perform(*args) 
    DoSomeThing.new.run 
    end 
end 

Est-il possible d'y arriver avec sidekiq_cron?

Je pensais à faire une autre course d'emploi d'abord pour obtenir toutes les fuseaux horaires de la DB et obtenir la différence entre eux et le fuseau horaire du serveur puis passer chacun au code suivant

FooJob.set(wait_until: "Pass the time here").perform_later 

Mais je Je ne sais pas si c'est la meilleure façon d'accomplir ceci ou pas car je vais avoir un autre problème de synchronisation avec le fonctionnement du premier emploi

Répondre

0

Salut vous pouvez utiliser les rails actifs rappeler les dossiers pour mettre à jour les emplois lorsqu'une entreprise est ajoutée ou ça change le fuseau horaire. Ce sera beaucoup plus efficace.

Lors d'une mise à jour de fuseau horaire, recherchez un travail avec un nom unique, détruisez-le et créez un nouveau travail en fonction du fuseau horaire.

Vous devrez définir une seule fois le fuseau horaire de tous les travaux en cours