Ngoại lệ PDO trong khi thực hiện cron: hàng đợi bản tin gửi thất bại (cột không xác định 'main_table.data' trong 'danh sách trường')


15

công việc định kỳ không thành công khi xử lý hàng đợi bản tin. Tôi đã gỡ lỗi các cuộc gọi PDO và có vẻ như Magento đang trộn lẫn các trường ở đây. Tôi không biết Magento (hoặc Zend PDO) lấy các trường để chọn từ đâu, nhưng có vẻ như hoàn toàn lẫn lộn:

Có vẻ như Magento thất bại trong việc lấy tên của khách hàng. Các lựa chọn cuối cùng là:

SELECT eav_entity_type.* FROM eav_entity_type WHERE (eav_entity_type.entity_type_code='customer')

DESCRIBE customer_eav_attribute

DESCRIBE customer_eav_attribute_website

sau đó đến một lựa chọn với một danh sách trường không tồn tại:

SELECT main_table.data, main_table.lifetime, main_table.expire, main_table.priority, additional_table.attribute_id, additional_table.is_visible, additional_table.input_filter, additional_table.multiline_count, additional_table.validate_rules, additional_table.is_system, additional_table.sort_order, additional_table.data_model, scope_table.website_id AS scope_website_id, scope_table.is_visible AS scope_is_visible, scope_table.multiline_count AS scope_multiline_count FROM eav_attribute AS main_table INNER JOIN customer_eav_attribute AS additional_table ON additional_table.attribute_id = main_table.attribute_id LEFT JOIN customer_eav_attribute_website AS scope_table ON scope_table.attribute_id = main_table.attribute_id AND scope_table.website_id = :scope_website_id WHERE (main_table.entity_type_id = :mt_entity_type_id)

Các tham số cho truy vấn đó: :mt_entity_type_id' => 1:scope_website_id' => 0

điều này làm tăng

exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'main_table.data' in 'field list''

bởi vì bảng eav_attribution không bao gồm dữ liệu trường, thời gian tồn tại, hết hạn hoặc mức độ ưu tiên.

Đây là dấu vết ngăn xếp hoàn chỉnh:

Stack trace:
0 /usr/www/users/weartb/shop/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
1 /usr/www/users/weartb/shop/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
2 /usr/www/users/weartb/shop/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
3 /usr/www/users/weartb/shop/lib/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
4 /usr/www/users/weartb/shop/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT `main_ta...', Array)
5 /usr/www/users/weartb/shop/lib/Varien/Db/Adapter/Pdo/Mysql.php(428): Zend_Db_Adapter_Pdo_Abstract->query('SELECT `main_ta...', Array)
6 /usr/www/users/weartb/shop/lib/Zend/Db/Adapter/Abstract.php(737): Varien_Db_Adapter_Pdo_Mysql->query('SELECT `main_ta...', Array)
7 /usr/www/users/weartb/shop/lib/Varien/Data/Collection/Db.php(734): Zend_Db_Adapter_Abstract->fetchAll('SELECT `main_ta...', Array)
8 /usr/www/users/weartb/shop/app/code/core/Mage/Core/Model/Resource/Db/Collection/Abstract.php(521): Varien_Data_Collection_Db->_fetchAll('SELECT `main_ta...', Array)
9 /usr/www/users/weartb/shop/app/code/core/Mage/Eav/Model/Config.php(356): Mage_Core_Model_Resource_Db_Collection_Abstract->getData()
10 /usr/www/users/weartb/shop/app/code/core/Mage/Eav/Model/Config.php(478): Mage_Eav_Model_Config->_initAttributes(Object(Mage_Eav_Model_Entity_Type))
11 /usr/www/users/weartb/shop/app/code/core/Mage/Eav/Model/Entity/Abstract.php(512): Mage_Eav_Model_Config->getEntityAttributeCodes(Object(Mage_Eav_Model_Entity_Type), Object(Mage_Customer_Model_Customer))
12 /usr/www/users/weartb/shop/app/code/core/Mage/Customer/Model/Customer.php(340): Mage_Eav_Model_Entity_Abstract->loadAllAttributes(Object(Mage_Customer_Model_Customer))
13 /usr/www/users/weartb/shop/app/code/core/Mage/Customer/Model/Customer.php(354): Mage_Customer_Model_Customer->getAttributes()
14 /usr/www/users/weartb/shop/app/code/core/Mage/Newsletter/Model/Resource/Subscriber/Collection.php(134): Mage_Customer_Model_Customer->getAttribute('firstname')
15 /usr/www/users/weartb/shop/app/code/core/Mage/Newsletter/Model/Queue.php(191): Mage_Newsletter_Model_Resource_Subscriber_Collection->showCustomerInfo()
16 [internal function]: Mage_Newsletter_Model_Queue->sendPerSubscriber(20)
17 /usr/www/users/weartb/shop/lib/Varien/Data/Collection.php(466): call_user_func_array(Array, Array)
18 /usr/www/users/weartb/shop/app/code/core/Mage/Newsletter/Model/Observer.php(70): Varien_Data_Collection->walk('sendPerSubscrib...', Array)
19 [internal function]: Mage_Newsletter_Model_Observer->scheduledSend(Object(Mage_Cron_Model_Schedule))
20 /usr/www/users/weartb/shop/app/code/core/Mage/Cron/Model/Observer.php(325): call_user_func_array(Array, Array)
21 /usr/www/users/weartb/shop/app/code/core/Mage/Cron/Model/Observer.php(72): Mage_Cron_Model_Observer->_processJob(Object(Mage_Cron_Model_Schedule), Object(Mage_Core_Model_Config_Element))
22 /usr/www/users/weartb/shop/app/code/core/Mage/Core/Model/App.php(1338): Mage_Cron_Model_Observer->dispatch(Object(Varien_Event_Observer))
23 /usr/www/users/weartb/shop/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Cron_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
24 /usr/www/users/weartb/shop/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('default', Array)
25 /usr/www/users/weartb/shop/cron.php(84): Mage::dispatchEvent('default')
26 {main}

Mọi thứ có vẻ ổn cho đến khi Mage_Customer_Model_Customer->getAttribute('firstname')gọi.

Chúng tôi đã không mở rộng mô hình khách hàng hoặc sử dụng bất kỳ mô-đun nào làm như vậy, đồng thời xem trước bản tin cũng hoạt động tốt và gửi nó theo cách thủ công, vì vậy ngoại lệ này chỉ xảy ra khi Magento cố gắng xử lý hàng đợi bản tin thông qua cuộc gọi cron.


Phiên bản nào của Magento? Trong Magento 1.9.0.1 tôi có thể chạy Zend_Debug::dump(Mage::getModel('customer/customer')->getAttribute('firstname'));và lấy Mage_Customer_Model_Attributelại hợp lệ . Bạn có thể xác nhận thủ công trong cơ sở dữ liệu rằng một thuộc tính firstnameđang ở eav_attributevà có quyền entity_type_idtừ eav_entity_typekhông?
Tyler V.

Câu trả lời:


3

Tôi nghĩ rằng bạn đã sửa đổi ứng dụng tệp lõi / mã / lõi / Mage / Bản tin / Mô hình / Tài nguyên / Thuê bao / Bộ sưu tập.php

Vui lòng kiểm tra hàm showCustomerInfo () gần dòng 130. Nó sẽ là:

public function showCustomerInfo()
{
    $adapter = $this->getConnection();
    $customer = Mage::getModel('customer/customer');
    $firstname  = $customer->getAttribute('firstname');
    $lastname   = $customer->getAttribute('lastname');

    $this->getSelect()
        ->joinLeft(
            array('customer_lastname_table'=>$lastname->getBackend()->getTable()),
            $adapter->quoteInto('customer_lastname_table.entity_id=main_table.customer_id
             AND customer_lastname_table.attribute_id = ?', (int)$lastname->getAttributeId()),
            array('customer_lastname'=>'value')
        )
        ->joinLeft(
            array('customer_firstname_table'=>$firstname->getBackend()->getTable()),
            $adapter->quoteInto('customer_firstname_table.entity_id=main_table.customer_id
             AND customer_firstname_table.attribute_id = ?', (int)$firstname->getAttributeId()),
            array('customer_firstname'=>'value')
        );

    return $this;
}

Tại sao tôi nghĩ vậy?

  1. Nhật ký lỗi của bạn hiển thị những gì không có bất kỳ tiện ích mở rộng của bên thứ 3 hoặc tệp Mage / cục bộ nào có liên quan.

  2. Truy vấn SQL tiêu chuẩn cho hành động Magento này không có phần 'main_table.data, main_table.lifetime, main_table.Exire, main_table.p Warriority,'.


1

Chạy qua dấu vết ngăn xếp của bạn, SQL của bạn sẽ trông giống như thế này:

SELECT `main_table`.`attribute_id`, `main_table`.`entity_type_id`, `main_table`.`attribute_code`, `main_table`.`attribute_model`, `main_table`.`backend_model`, `main_table`.`backend_type`, `main_table`.`backend_table`, `main_table`.`frontend_model`, `main_table`.`frontend_input`, `main_table`.`frontend_label`, `main_table`.`frontend_class`, `main_table`.`source_model`, `main_table`.`is_required`, `main_table`.`is_user_defined`, `main_table`.`default_value`, `main_table`.`is_unique`, `main_table`.`note`, `additional_table`.`is_visible`, `additional_table`.`input_filter`, `additional_table`.`multiline_count`, `additional_table`.`validate_rules`, `additional_table`.`is_system`, `additional_table`.`sort_order`, `additional_table`.`data_model`, `scope_table`.`website_id` AS `scope_website_id`, `scope_table`.`is_visible` AS `scope_is_visible`, `scope_table`.`is_required` AS `scope_is_required`, `scope_table`.`default_value` AS `scope_default_value`, `scope_table`.`multiline_count` AS `scope_multiline_count` FROM `eav_attribute` AS `main_table`
 INNER JOIN `customer_eav_attribute` AS `additional_table` ON additional_table.attribute_id = main_table.attribute_id
 LEFT JOIN `customer_eav_attribute_website` AS `scope_table` ON scope_table.attribute_id = main_table.attribute_id AND scope_table.website_id = :scope_website_id WHERE (main_table.entity_type_id = :mt_entity_type_id)

Tôi dường như không thể tìm thấy các cột không xác định ở bất cứ đâu trong Magento, tuy nhiên tôi có một lén lút giả mạo điều này có liên quan đến phiên / bộ đệm nhưng không chắc chắn 100%. Bạn có bật Redis không? Nếu vậy, vô hiệu hóa và xóa bộ nhớ cache và xem kết quả là gì.

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.