La actualización diaria de las reglas del catálogo no funciona

15

Me enfrento al problema de que la actualización diaria de las reglas del catálogo de Magento no funciona. Esto significa que no hay cambios en el precio de los productos cuando llega la fecha de caducidad de la regla del catálogo, por lo que tengo que presionar el botón de aplicar regla en Admin. Cron está configurado y funcionando. Parece que el método catalogrule / observer :: dailyCatalogUpdate debería verificar y aplicar reglas automáticamente todos los días, pero no lo hace (también he intentado iniciarlo manualmente). Aquí está el código central 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>

Observador:

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

    return $this;
}

Tuve un método de observación de modificación exitoso como a continuación:

/*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 esta forma, las reglas se verifican y aplican todos los días y los precios de los productos se cambian si la regla caduca. No creo que sea un error de Magento. Por favor, avise cuál es el problema de que las reglas no se verifiquen y apliquen automáticamente.

vovsky
fuente
¿Hay algún error registrado en su registro de errores de PHP o en la columna de mensajes en la tabla cron_schedule? Supongo que se llama al cron, ya que usted indicó que había tenido algún éxito al modificar el método de observación.
davidalger
También puede colocar algunas llamadas de registro en el observador original y ver si se llama. Solo para estar seguro en eso.
Petar Dzhambazov

Respuestas:

7

Recientemente tuve el mismo problema cuando estaba probando una nueva regla de precios para nuestro proyecto. Y la razón de mi dolor de cabeza fue que no me di cuenta de que cada vez que creas una nueva regla o editas algunas de las reglas existentes, debes presionar el botón " Aplicar reglas " para que Magento conozca los cambios en tus reglas.

Max Uroda
fuente
2
Muchas gracias. Tienes razón: guardar la regla no es suficiente para los cambios. Sería genial tener una columna adicional en la cuadrícula de reglas que diga si la regla se aplicó o no.
vovsky
Se supone que DailyCatalogUpdate debe aplicar reglas todas las noches si no presiona ese botón. De lo contrario, ¿cuál es el propósito de ese cron?
Goose
7

Asegurarse de presionar "Aplicar reglas" no siempre es suficiente. Recientemente descubrí que si cron no está configurado correctamente, en algún momento en el futuro, las reglas no se aplicarán.

No pude concretar cuando las reglas dejaron de funcionar. En mi caso, tenía un puñado de reglas que se aplican según el grupo de clientes (mayorista).

  1. Mira la cron_schedulemesa. Asegúrese de tener algunas entradas aquí correspondientes a catalogrule_apply_all(creo que ese es el nombre del proceso).
  2. Configure el cronjob en el archivo del módulo CatalogRule config.xmlpara que se ejecute cada minuto más o menos (para probar) con * / 1.
  3. Vuelva a mirar la cron_schedulemesa y vuelva a cargarla cada dos minutos. Debería ver que los nuevos procesos se agregan / ejecutan automáticamente sin tener que presionar manualmente el cron.phparchivo de su tienda .
  4. Si no ve ninguno de los procesos de actualización manual, ingrese SSH en el sitio como el usuario propietario de los archivos del sitio. Desde una línea de comando: crontab -e(puede estar en Vim y no saber qué hacer, le sugiero que use Google para usar los comandos básicos de Vim).
  5. Configure el crontab para que se ejecute: */1 * * * * /path/to/your/cron.sh
  6. Ahora revise la cron_scheduletabla nuevamente para asegurarse de que los procesos cron se ejecuten automáticamente.
  7. Con suerte, todo está bien en este punto. Continúe y regrese y configure sus procesos cron para que se ejecuten en los intervalos deseados.
pspahn
fuente
3

Compruebe si el trabajo se programa

Puede hacerlo comprobando la base de datos o instalando esta extensión: Aoe_Scheduler

Prueba si el trabajo funciona

Cree un script php run_my_rules.phpy ponga allí solo el contenido para la función: dailyCatalogUpdateluego ejecútelo desde la consola. Mira lo que está pasando.

FlorinelChis
fuente