La mise à jour quotidienne des règles de catalogue ne fonctionne pas

15

Je suis confronté au problème que la mise à jour quotidienne des règles du catalogue de Magento ne fonctionne pas. Cela signifie qu'il n'y a pas de changement de prix des produits lorsque la date d'expiration de la règle de catalogue arrive, je dois donc appuyer sur le bouton Appliquer la règle dans Admin. Cron est configuré et fonctionne. Il semble que la méthode catalogrule / observer :: dailyCatalogUpdate devrait vérifier et appliquer les règles automatiquement tous les jours, mais ce n'est pas le cas (j'ai également essayé de la lancer manuellement). Voici le code de base de Magento:

<!--file: app/code/core/Mage/CatalogRule/etc/config.xml-->
<crontab>
    <jobs>
        <catalogrule_apply_all>
            <schedule>
                <cron_expr>*/1 * * * *</cron_expr>
            </schedule>
            <run>
                <model>catalogrule/observer::dailyCatalogUpdate</model>
            </run>
        </catalogrule_apply_all>
    </jobs>
    ...
</crontab>

Observateur:

/*file app/code/core/Mage/CatalogRule/Model/Observer.php*/
public function dailyCatalogUpdate($observer)
{
    Mage::getResourceSingleton('catalogrule/rule')->applyAllRulesForDateRange();

    return $this;
}

J'ai réussi à modifier la méthode d'observation comme ci-dessous:

/*file app/code/core/Mage/CatalogRule/Model/Observer.php*/
public function dailyCatalogUpdate($observer)
{
    Mage::getModel('catalogrule/rule')->getResourceCollection()
                  ->walk(array(
                         Mage::getResourceSingleton('catalogrule/rule'),
                         'updateRuleProductData'
                  ));
    Mage::getResourceSingleton('catalogrule/rule')->applyAllRulesForDateRange();

    return $this;
}

De cette façon, les règles sont vérifiées et appliquées chaque jour et les prix des produits sont modifiés si la règle expire. Je ne pense pas que ce soit un bug de Magento. Veuillez indiquer quel est le problème du fait que les règles ne sont pas vérifiées et appliquées automatiquement?

vovsky
la source
Des erreurs sont-elles enregistrées dans votre journal des erreurs PHP ou dans la colonne des messages de la table cron_schedule? Je suppose que le cron est en fait appelé puisque vous avez indiqué que vous aviez réussi en modifiant la méthode d'observation.
davidalger
Vous pouvez également placer des appels de journal dans l'observateur d'origine et voir s'il est appelé. Juste pour être sûr de ça.
Petar Dzhambazov

Réponses:

7

Récemment, j'ai eu le même problème lorsque je testais une nouvelle règle de prix pour notre projet. Et la raison de mon mal de tête était que je n'ai pas remarqué que chaque fois que vous créez une nouvelle règle ou modifiez certaines des règles existantes - vous devez appuyer sur le bouton " Appliquer les règles " pour informer Magento de vos changements de règles.

Max Uroda
la source
2
Merci beaucoup. Vous avez raison: enregistrer la règle ne suffit pas pour les changements. Ce serait formidable d'avoir une colonne supplémentaire dans la grille de règles indiquant si la règle a été appliquée ou non.
vovsky
Le DailyCatalogUpdate est censé appliquer des règles tous les soirs si vous n'appuyez pas sur ce bouton. Sinon, quel est le but de ce cron?
Goose
7

Il ne suffit pas toujours de cliquer sur «Appliquer les règles». J'ai récemment découvert que si cron n'est pas configuré correctement, à un moment donné dans le futur, les règles ne seront pas appliquées.

Je n'ai pas pu vraiment comprendre quand les règles ont cessé de fonctionner. Dans mon cas, j'avais une poignée de règles qui sont appliquées en fonction du groupe de clients (gros).

  1. Vérifiez le cron_scheduletableau. Assurez-vous que certaines entrées correspondent à catalogrule_apply_all(je pense que c'est le nom du processus).
  2. Définissez le cronjob dans le config.xmlfichier du module CatalogRule pour qu'il s'exécute toutes les minutes (pour les tests) avec * / 1.
  3. Revenez sur la cron_scheduletable et continuez de la recharger toutes les deux minutes. Vous devriez voir de nouveaux processus ajoutés / exécutés automatiquement sans jamais avoir à frapper manuellement le cron.phpfichier de votre magasin .
  4. Si vous ne voyez aucun des processus se mettre à jour manuellement, connectez-vous au site en tant qu'utilisateur propriétaire des fichiers du site. À partir d'une ligne de commande: crontab -e(vous pouvez être dans Vim et ne pas savoir quoi faire, je suggère à Google d'utiliser des commandes Vim de base).
  5. Définissez la crontab pour qu'elle s'exécute: */1 * * * * /path/to/your/cron.sh
  6. Vérifiez à cron_schedulenouveau le tableau pour vous assurer que les processus cron s'exécutent automatiquement.
  7. Espérons que tout va bien à ce stade. Allez-y, revenez en arrière et définissez vos processus cron pour qu'ils s'exécutent aux intervalles souhaités.
pspahn
la source
3

Vérifiez si le travail est planifié

Vous pouvez le faire en vérifiant la base de données ou en installant cette extension: Aoe_Scheduler

Testez si le travail fonctionne

Créez un script php run_my_rules.phpet insérez-y uniquement le contenu de la fonction: dailyCatalogUpdateexécutez-le ensuite depuis la console. Voyez ce qui se passe.

FlorinelChis
la source