カタログルールの毎日の更新が機能しない


15

Magentoのカタログルールの毎日の更新が機能しないという問題に直面しています。これは、カタログルールの有効期限が切れたときに製品の価格が変更されないことを意味するため、管理でルール適用ボタンを押す必要があります。Cronが構成され、機能しています。catalogrule / observer :: dailyCatalogUpdateメソッドは毎日自動的にルールをチェックして適用するようですが、そうではありません(手動で起動しようとしました)。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>

観察者:

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

    return $this;
}

以下のようにオブザーバーメソッドを変更することに成功しました。

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

このように、ルールは毎日チェックおよび適用され、ルールの有効期限が切れると製品の価格が変更されます。私はそれがMagentoのバグだとは思わない。ルールが自動的にチェックおよび適用されないという問題は何ですか?


PHPエラーログまたはcron_scheduleテーブルのメッセージ列にエラーが記録されていますか?オブザーバメソッドを変更することで成功したと示しているため、cronが実際に呼び出されていると思います。
-davidalger

また、元のオブザーバーにいくつかのログ呼び出しを配置し​​て、呼び出されるかどうかを確認できます。念のために。
ペタルジャンバゾフ

回答:


7

最近、プロジェクトの新しい価格ルールをテストしているときに同じ問題が発生しました。そして、私の頭痛の理由は、私は気付かなかったということでした新しいルールや編集既存のルールのいくつかを作成するたびにその-あなたは「を押す必要があるルールを適用し、ルールの変更についてMagentoのノウハウを作るためにボタンを」。


2
どうもありがとうございました。そのとおりです。ルールを保存するだけでは変更には不十分です。ルールが適用されているかどうかを示す追加の列をルールグリッドに追加しておくと便利です。
vovsky

dailyCatalogUpdateは、そのボタンを押さない場合、ルールを毎晩適用することを想定しています。それ以外の場合、そのcronの目的は何ですか?
グース

7

「ルールの適用」を必ずヒットさせるだけでは十分ではありません。最近、cronが適切に設定されていないと、将来のある時点でルールが適用されないことを発見しました。

ルールが機能しなくなったとき、私は本当に特定することができませんでした。私の場合、顧客グループ(卸売)に基づいて適用されるいくつかのルールがありました。

  1. cron_schedule表を確認してください。ここに対応するエントリがあることを確認しますcatalogrule_apply_all(これがプロセス名だと思います)。
  2. CatalogRuleモジュールのconfig.xmlファイルのcronjob を* / 1で1分ごと(テスト用)に実行するように設定します。
  3. cron_scheduleテーブルを振り返り、数分ごとにリロードし続けます。手動でストアのファイルにアクセスすることなく、新しいプロセスが自動的に追加/実行されるのを確認 cron.phpできます。
  4. プロセスが手動で更新されない場合は、サイトのファイルを所有しているユーザーとしてサイトにSSH接続します。コマンドラインから: crontab -e(Vimを使用していて、何をすべきかわからない場合があります。基本的なVimコマンドの使用についてはgoogleを推奨します)
  5. 実行するcrontabを設定します。 */1 * * * * /path/to/your/cron.sh
  6. 次に、cron_scheduleテーブルを再度チェックして、cronプロセスが自動的に実行されていることを確認します。
  7. うまくいけば、この時点ですべてがうまくいきました。先に進み、戻って、cronプロセスを希望の間隔で実行するように設定します。

3

ジョブがスケジュールされているかどうかを確認します

これを行うには、データベースを確認するか、次の拡張機能をインストールします:Aoe_Scheduler

ジョブが機能するかどうかをテストする

phpスクリプトrun_my_rules.phpを作成し、関数のコンテンツのみをそこに配置します。dailyCatalogUpdateその後、コンソールからそれを実行します。何が起こっているかを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.