Aturan katalog pembaruan harian tidak berfungsi

15

Saya menghadapi masalah bahwa Katalog Magento mengupdate setiap hari tidak berfungsi. Ini berarti bahwa tidak ada perubahan harga produk ketika tanggal kadaluwarsa aturan katalog datang, jadi saya harus menekan tombol aturan berlaku di Admin. Cron dikonfigurasi dan berfungsi. Tampaknya metode catalogrule / observer :: dailyCatalogUpdate harus memeriksa dan menerapkan aturan secara otomatis setiap hari, tetapi ternyata tidak (juga saya sudah mencoba meluncurkannya secara manual). Berikut adalah kode inti 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>

Pengamat:

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

    return $this;
}

Saya berhasil memodifikasi metode pengamat seperti di bawah ini:

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

Dengan cara ini, peraturan diperiksa dan diterapkan setiap hari dan harga produk diubah jika aturan berakhir. Saya tidak percaya itu adalah bug Magento. Tolong, beri tahu masalah apa yang aturannya tidak diperiksa dan diterapkan secara otomatis?

vovsky
sumber
Apakah ada kesalahan yang dicatat ke log kesalahan PHP Anda atau kolom pesan pada tabel cron_schedule? Saya berasumsi cron sebenarnya dipanggil karena Anda menunjukkan Anda akan sukses dengan memodifikasi metode pengamat.
davidalger
Anda juga dapat menempatkan beberapa panggilan log di pengamat asli dan melihat apakah itu dipanggil. Untuk amannya saja.
Petar Dzhambazov

Jawaban:

7

Baru-baru ini saya memiliki masalah yang sama ketika saya menguji aturan harga baru untuk proyek kami. Dan alasan sakit kepala saya adalah bahwa saya tidak memperhatikan bahwa setiap kali Anda membuat aturan baru atau mengedit beberapa aturan yang ada - Anda harus menekan tombol " Terapkan Aturan " untuk membuat Magento tahu tentang perubahan aturan Anda.

Max Uroda
sumber
2
Terima kasih banyak. Anda benar: aturan penyimpanan tidak cukup untuk perubahan. Akan lebih bagus untuk memiliki kolom tambahan di kisi aturan yang mengatakan apakah aturan diterapkan atau tidak.
vovsky
DailyCatalogUpdate seharusnya menerapkan aturan setiap malam jika Anda tidak menekan tombol itu. Kalau tidak, apa tujuan cron itu?
Goose
7

Memastikan untuk menekan "Terapkan Aturan" tidak selalu cukup. Saya baru-baru ini menemukan bahwa jika cron tidak diatur dengan benar, di beberapa titik di masa depan, aturan tidak akan diterapkan.

Saya tidak dapat benar-benar memakukan ketika aturan berhenti bekerja. Dalam kasus saya, saya memiliki beberapa aturan yang diterapkan berdasarkan kelompok pelanggan (grosir).

  1. Periksa cron_scheduletabelnya. Pastikan Anda memiliki beberapa entri di sini yang sesuai catalogrule_apply_all(Saya pikir itu nama proses).
  2. Atur cronjob dalam file module CatalogRule config.xmluntuk dijalankan setiap sekitar satu menit (untuk pengujian) dengan * / 1.
  3. Lihatlah kembali cron_schedulemeja, dan terus memuatnya kembali setiap beberapa menit. Anda harus melihat proses baru ditambahkan / dieksekusi secara otomatis tanpa harus secara manual menekan cron.phpfile toko Anda .
  4. Jika Anda tidak melihat salah satu proses memperbarui secara manual, SSH ke situs sebagai pengguna yang memiliki file situs. Dari baris perintah: crontab -e(Anda mungkin berada di Vim dan tidak tahu harus berbuat apa, saya sarankan google menggunakan perintah Vim dasar).
  5. Atur crontab untuk dijalankan: */1 * * * * /path/to/your/cron.sh
  6. Sekarang periksa cron_schedulelagi tabel untuk memastikan bahwa proses cron mengeksekusi secara otomatis.
  7. Semoga semuanya baik pada saat ini. Silakan dan kembali dan atur proses cron Anda untuk berjalan pada interval yang diinginkan.
pspahn
sumber
3

Periksa apakah pekerjaan dijadwalkan

Anda dapat melakukan ini dengan memeriksa database atau menginstal ekstensi ini: Aoe_Scheduler

Uji apakah pekerjaan itu berhasil

Buat skrip php run_my_rules.phpdan letakkan di sana hanya konten untuk fungsi: dailyCatalogUpdatelalu jalankan itu dari konsol. Lihat apa yang terjadi.

FlorinelChis
sumber