A atualização diária das regras do catálogo não funciona

15

Eu enfrento o problema de que a atualização diária das regras do catálogo do Magento não funciona. Isso significa que não há alterações de preço dos produtos quando a data de validade da regra de catálogo chegar, por isso tenho que pressionar o botão Aplicar regra no Admin. Cron está configurado e funcionando. Parece que o método catalogrule / observer :: dailyCatalogUpdate deve verificar e aplicar regras automaticamente todos os dias, mas não o faz (também tentei iniciá-lo manualmente). Aqui está o código principal do 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;
}

Tive sucesso ao modificar o método observador, como abaixo:

/*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;
}

Dessa forma, as regras são verificadas e aplicadas todos os dias e os preços dos produtos são alterados se a regra expirar. Não acredito que seja um bug do Magento. Por favor, informe qual é o problema de as regras não estarem sendo verificadas e aplicadas automaticamente?

vovsky
fonte
Há algum erro sendo registrado no seu log de erros do PHP ou na coluna de mensagens na tabela cron_schedule? Suponho que o cron esteja sendo chamado de fato, pois você indicou que teve algum sucesso modificando o método observador.
Davidalger
Além disso, você pode fazer algumas chamadas de log no observador original e ver se é chamado. Só para ter certeza disso.
Petar Dzhambazov

Respostas:

7

Recentemente, tive o mesmo problema ao testar uma nova regra de preço para o nosso projeto. E a razão da minha dor de cabeça foi que eu não percebi que toda vez que você cria uma nova regra ou edita algumas das regras existentes - você deve pressionar o botão " Aplicar regras " para que o Magento saiba sobre as alterações nas regras.

Max Uroda
fonte
2
Muito obrigado. Você está certo: salvar regra não é suficiente para alterações. Seria ótimo ter uma coluna extra na grade de regras dizendo se a regra foi aplicada ou não.
vovsky
O dailyCatalogUpdate deve aplicar regras todas as noites se você não pressionar esse botão. Caso contrário, qual é o objetivo desse cron?
Goose
7

Certificar-se de pressionar "Aplicar regras" nem sempre é suficiente. Descobri recentemente que, se o cron não estiver configurado corretamente, em algum momento no futuro, as regras não serão aplicadas.

Eu era incapaz de realmente definir quando as regras pararam de funcionar. No meu caso, eu tinha várias regras aplicadas com base no grupo de clientes (atacado).

  1. Verifique a cron_schedulemesa. Verifique se você tem algumas entradas aqui correspondentes catalogrule_apply_all(acho que esse é o nome do processo).
  2. Defina o cronjob no config.xmlarquivo do módulo CatalogRule para executar a cada minuto ou mais (para teste) com * / 1.
  3. Olhe para a cron_schedulemesa e continue a recarregá-la a cada dois minutos. Você deve ver novos processos sendo adicionados / executados automaticamente, sem precisar acessar manualmente o arquivo da sua loja cron.php.
  4. Se você não estiver vendo nenhum dos processos atualizar manualmente, faça o SSH no site como o usuário que possui os arquivos do site. Em uma linha de comando: crontab -e(você pode estar no Vim e não sabe o que fazer, sugiro que o Google use comandos básicos do Vim).
  5. Defina o crontab para executar: */1 * * * * /path/to/your/cron.sh
  6. Agora verifique a cron_scheduletabela novamente para garantir que os processos cron estejam sendo executados automaticamente.
  7. Felizmente, tudo está bom neste momento. Vá em frente, volte e configure seus processos cron para serem executados nos intervalos desejados.
pspahn
fonte
3

Verifique se o trabalho é agendado

Você pode fazer isso verificando o banco de dados ou instalando esta extensão: Aoe_Scheduler

Teste se o trabalho funciona

Crie um script php run_my_rules.phpe insira apenas o conteúdo da função: dailyCatalogUpdateexecute-o no console. Veja o que está acontecendo.

FlorinelChis
fonte