Các loại khối không hợp lệ


9

Tôi nhận được thông báo lỗi sau một vài lần một ngày và kiến ​​thức của tôi về hoạt động bên trong của Magento CE 1.9.0.1 đủ mỏng để tôi không biết liệu đây có phải là hành vi tư vấn bình thường từ Magento hay không. tôi tôi có một vấn đề xấu

Đây là thông điệp:

Một hoặc nhiều loại Cache không hợp lệ: Chặn đầu ra HTML. Nhấn vào đây để đi đến Quản lý bộ đệm và làm mới các loại bộ đệm.

Làm mới bộ nhớ cache cụ thể đó làm cho vấn đề biến mất trong vài giờ hoặc lâu hơn.

Tôi hiện không chỉnh sửa bố cục, sản phẩm, vv, không có gì cả.

Điều gì là sai và làm thế nào tôi có thể sửa nó?


Tôi nhận được điều này mỗi ngày khi tôi thức dậy và đăng nhập vào Magento v1.9.2.2 - Một hoặc nhiều loại Cache không hợp lệ: Chặn đầu ra HTML. Nhấn vào đây để đi đến Quản lý bộ đệm và làm mới các loại bộ đệm. Tôi chưa bao giờ sử dụng để có được điều này trên các phiên bản trước trừ khi tôi thực sự đang làm gì đó. Đây có phải là một số loại lỗi?
Neal Hart

Câu trả lời:


6

Đầu tiên, điều quan trọng là phải hiểu rằng đây không phải là một lỗi, nó chỉ là một thông báo.

Có thể có vô số lý do khiến bộ đệm khối không hợp lệ từ các bản cập nhật cho sản phẩm, thay đổi quy tắc giá của danh mục và tiện ích mở rộng của bên thứ 3. Ngoài ra, việc chạy cronjobs cũng có thể khiến bộ đệm khối bị vô hiệu.

Có một số tiện ích mở rộng cộng đồng có sẵn (được liệt kê bên dưới) sẽ làm mới các khối của bạn khi trở nên vô hiệu.

https://github.com/tomasinchoo/Inchoo_InvalidatedBlockCacheFix

https://github.com/mklooss/Loewenstark_InvalidCache


2

Đây là một lỗi.

Có một vấn đề công việc CRON (bài 1.9.?) Chạy và làm mất hiệu lực Bộ đệm HTML, điều này tạo ra sự cố (ví dụ: trong trường hợp của tôi, không thể giảm giá cho Giỏ - vì vậy khách hàng sẽ bị tính sai số tiền).

Chúng ta không cần chạy tiện ích mở rộng để khắc phục sự cố đã được giới thiệu!


Tôi đang nhận được hành vi tương tự chính xác trên CE 1.9.2.2, mỗi buổi sáng Khối đầu ra HTML cần được làm mới và suy nghĩ về một vấn đề công việc định kỳ. @Brian bạn có thể cung cấp thêm chi tiết về nhiệm vụ cron đó không?
Marc

Tôi nghĩ rằng bạn đang nghĩ ngược lại: Không phải là "giá không mang theo vào giỏ", mà là giá trên trang đã được thêm vào bộ đệm trước khi làm mới chạy, và do đó bộ đệm bị sai , trong khi giá chính xác được hiển thị trong giỏ hàng. Đối với người mua, họ có thể nghĩ rằng giá nào thấp hơn là giá "chính xác".
Eric Seastrand

@Brian, bạn có thể cung cấp thêm thông tin chi tiết về tác vụ cron đã vô hiệu hóa các khối của bạn không?
Haim

0

Đây là hoạt động Magento tiêu chuẩn từ 1.6.xx trở đi. Một cái gì đó luôn luôn gây ra một sự vô hiệu hóa bộ đệm ẩn khối html ngẫu nhiên.

Tôi chỉ thiết lập một người quan sát thực hiện công việc định kỳ định kỳ, đặt bất kỳ khoảng thời gian nào có vẻ phù hợp.

Quan sát.php

<?php

/************************
 * Find invalidated cache types and refresh
 *
 * Set Cron Time for refresh in config.xml
 *
 */

class Fiasco_Rcache_Model_Observer {

    public function refreshCache() {

        try {

            $types = Mage::app()->getCacheInstance()->getInvalidatedTypes();

            foreach($types as $type) {

                Mage::app()->getCacheInstance()->cleanType($type->getId());

            }

            Mage::log('Invalid Cache Types Refreshed');

        } catch (Exception $e) {

            Mage::logException($e);

        }
    }
}

cấu hình

<?xml version="1.0"?>
<config>
    <modules>
        <Fiasco_Rcache>
            <version>0.5.0</version>
        </Fiasco_Rcache>
    </modules>
    <global>
        <models>
            <refresh_cache>
                <class>Fiasco_Rcache_Model</class>
            </refresh_cache>
        </models>
    </global>
    <crontab>
        <jobs>
            <refresh_cache>
                <!-- Min Hour Day Month DoW -->
                <schedule><cron_expr>0 */3 * * *</cron_expr></schedule>
                <run><model>refresh_cache/observer::refreshCache</model></run>
            </refresh_cache>
        </jobs>
    </crontab>
</config>

0

Chỉ báo bộ đệm không hợp lệ này có thể liên quan đến cron DailyCatalogUpdate. Nó chịu trách nhiệm áp dụng / làm mới các quy tắc danh mục.

Mỗi ngày một lần, nó gọi Mage::getSingleton('catalogrule/rule')->applyAll();.

Bên trong mã của phương thức này, có một cuộc gọi đến $this->_invalidateCache(), lần lượt các cuộc gọi $this->_app->getCacheInstance()->invalidateType()trên block_htmlbộ đệm.

Vấn đề là nó làm mất hiệu lực bộ đệm mà không thực hiện bất kỳ kiểm tra nào để xác định xem nó có thực sự còn hiệu lực hay không. Đối với tôi, điều này tốt hơn là không làm mất hiệu lực bộ đệm, bởi vì sau đó bạn ít nhất có thể biết rằng nó có thể không hợp lệ và sử dụng cái gì đó giống như những gì Fiasco Labs đề xuất để xóa dữ liệu được lưu trong bộ nhớ cache không hợp lệ (có khả năng).

Sau đó, nó trở thành một quyết định về việc bạn có muốn lỗi về phía:

A) Hiển thị cho khách hàng giá sai, nhưng giữ bộ đệm và do đó tải máy chủ ít hơn

hoặc là

B) Hiển thị giá chính xác, nhưng có nhiều lỗi nhớ cache hơn và do đó tải máy chủ cao hơn.

Có hai điều khó trong khoa học máy tính: đặt tên cho mọi thứ và vô hiệu hóa bộ đệm .


0

xem tại đây giải pháp: https://magento.stackexchange.com/a/72687

Về cơ bản thay đổi chức năng hàng ngàyCatalogUpdate từ app / code / local / Mage / CatalogRule / Model / Observer.php thành

        $collection = Mage::getResourceModel('catalogrule/rule_collection')
        ->addFieldToFilter('is_active', array('neq' => 0));
    if ($collection->getSize() == 0) {
        return $this;
    }
    parent::dailyCatalogUpdate($observer);
    $types = Mage::getConfig()->getNode('global/catalogrule/related_cache_types')->asArray();
    foreach (array_keys($types) as $type) {
        Mage::app()->getCacheInstance()->cleanType($type);
    }
    return $this;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.