การอัพเดทกฎของแคตตาล็อกทุกวันไม่ทำงาน


15

ฉันประสบกับปัญหาว่าแคตตาล็อกกฎของวีโอไอพีอัพเดททุกวันไม่ทำงาน ซึ่งหมายความว่าไม่มีการเปลี่ยนแปลงราคาผลิตภัณฑ์เมื่อถึงวันหมดอายุของกฎของแค็ตตาล็อกดังนั้นฉันต้องกดปุ่มใช้กฎกดในผู้ดูแลระบบ Cron ถูกกำหนดค่าและทำงาน ดูเหมือนว่า catalogrule / ผู้สังเกตการณ์ :: dailyCatalogUpdate วิธีควรตรวจสอบและใช้กฎโดยอัตโนมัติทุกวัน แต่มันไม่ (ฉันพยายามเปิดมันด้วยตนเอง) นี่คือรหัสหลักของวีโอไอพี:

<!--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

นอกจากนี้คุณสามารถวางสายบันทึกในผู้สังเกตการณ์เดิมและดูว่ามันถูกเรียก เพื่อความปลอดภัย
Petar Dzhambazov

คำตอบ:


7

เมื่อเร็ว ๆ นี้ฉันมีปัญหาเดียวกันเมื่อฉันทดสอบกฎราคาใหม่สำหรับโครงการของเรา และเหตุผลที่ทำให้ฉันปวดหัวก็คือฉันไม่ได้สังเกตว่าทุกครั้งที่คุณสร้างกฎใหม่หรือแก้ไขกฎที่มีอยู่คุณควรกดปุ่ม " ใช้กฎ " เพื่อให้ Magento รู้เกี่ยวกับการเปลี่ยนแปลงกฎของคุณ


2
ขอบคุณมาก. คุณพูดถูก: กฎการบันทึกไม่เพียงพอสำหรับการเปลี่ยนแปลง จะเป็นการดีถ้ามีคอลัมน์พิเศษในกริดกฎที่บอกว่ากฎถูกนำไปใช้หรือไม่
vovsky

DailyCatalogUpdate คาดว่าจะใช้กฎทุกคืนหากคุณไม่กดปุ่มนั้น มิฉะนั้นจุดประสงค์ของ cron นั้นคืออะไร?
Goose

7

การทำให้แน่ใจว่ากด "ใช้กฎ" ไม่เพียงพอ ฉันเพิ่งค้นพบว่าถ้า cron ไม่ได้ตั้งอย่างถูกต้องในบางจุดในอนาคตกฎจะไม่ถูกนำไปใช้

ฉันไม่สามารถตอกตะปูลงเมื่อกฎหยุดทำงาน ในกรณีของฉันฉันมีกฎจำนวนหนึ่งที่ใช้กับกลุ่มลูกค้า (ขายส่ง)

  1. ตรวจสอบcron_scheduleตาราง ตรวจสอบให้แน่ใจว่าคุณมีรายการที่ตรงกับที่นี่catalogrule_apply_all(ฉันคิดว่านั่นเป็นชื่อกระบวนการ)
  2. ตั้ง cronjob ในไฟล์โมดูล CatalogRule config.xmlเพื่อให้ทำงานทุก ๆ นาที (สำหรับการทดสอบ) ด้วย * / 1
  3. มองย้อนกลับไปที่cron_scheduleโต๊ะแล้วโหลดใหม่ทุกสองสามนาที คุณควรเห็นกระบวนการใหม่รับเพิ่ม / ดำเนินการโดยอัตโนมัติโดยไม่ต้องกดcron.phpไฟล์ของร้านค้าด้วยตนเอง
  4. หากคุณไม่เห็นกระบวนการใด ๆ อัปเดตด้วยตนเอง SSH ลงในไซต์ในฐานะผู้ใช้ที่เป็นเจ้าของไฟล์ของไซต์ จากบรรทัดคำสั่ง: crontab -e(คุณอาจเป็นกลุ่มและไม่รู้ว่าจะทำอย่างไรฉันขอแนะนำให้ google ใช้คำสั่งกลุ่ม Vim พื้นฐาน)
  5. ตั้ง crontab ให้ทำงาน: */1 * * * * /path/to/your/cron.sh
  6. ตรวจสอบcron_scheduleตารางอีกครั้งเพื่อให้แน่ใจว่ากระบวนการ cron กำลังดำเนินการโดยอัตโนมัติ
  7. หวังว่าทุกอย่างจะดีในจุดนี้ ไปข้างหน้าและย้อนกลับและตั้งค่ากระบวนการ cron ของคุณให้ทำงานตามช่วงเวลาที่ต้องการ

3

ตรวจสอบว่างานได้รับการกำหนด

คุณสามารถทำได้โดยการตรวจสอบฐานข้อมูลหรือติดตั้งส่วนขยายนี้: Aoe_Scheduler

ทดสอบว่างานทำงานหรือไม่

สร้าง php script run_my_rules.phpและใส่เฉพาะเนื้อหาสำหรับฟังก์ชั่น: dailyCatalogUpdateจากนั้นเรียกใช้จากคอนโซล ดูสิ่งที่เกิดขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.