zadanie cron kończy się niepowodzeniem podczas przetwarzania kolejki newslettera. Debugowałem wywołania PDO i wygląda na to, że Magento miesza tutaj pola. Nie mam pojęcia, skąd Magento (lub Zend PDO) uzyskuje pola do wyboru, ale wygląda to na całkowicie pomieszane:
Wygląda na to, że Magento nie otrzymuje imienia klienta. Ostatnie wybory to:
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
następnie następuje selekcja z nieistniejącą listą pól:
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)
Parametry tego zapytania: :mt_entity_type_id' => 1
i:scope_website_id' => 0
To podnosi się
exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'main_table.data' in 'field list''
ponieważ tabela eav_attribute nie zawiera danych pól, czasu życia, wygaśnięcia ani priorytetu.
Oto kompletny ślad stosu:
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}
Wszystko wydaje się w porządku do czasu Mage_Customer_Model_Customer->getAttribute('firstname')
połączenia.
Nie rozszerzyliśmy modelu klienta ani nie korzystamy z żadnych modułów, które to robią, również podgląd biuletynu działa dobrze i wysyłanie go również ręcznie, więc ten wyjątek występuje tylko wtedy, gdy Magento próbuje przetworzyć kolejkę biuletynu za pośrednictwem połączenia cron.
źródło
Zend_Debug::dump(Mage::getModel('customer/customer')->getAttribute('firstname'));
i odzyskać prawidłowyMage_Customer_Model_Attribute
zwrot. Czy możesz ręcznie potwierdzić w bazie danych, że atrybutfirstname
jest weav_attribute
katalogu i ma prawoentity_type_id
odeav_entity_type
?Odpowiedzi:
Myślę, że zmodyfikowałeś podstawową aplikację pliku / code / core / Mage / Newsletter / Model / Resource / Subscriber / Collection.php
Sprawdź funkcję showCustomerInfo () w pobliżu linii 130. Powinno to być:
Dlaczego tak myślę?
Twój dziennik błędów pokazuje, co nie dotyczy żadnych rozszerzeń stron trzecich ani plików Mage / local.
Standardowe zapytanie SQL dla tej akcji Magento nie ma części „main_table.data, main_table.lifetime, main_table.expire, main_table.priority”.
źródło
Po przejściu śledzenia stosu SQL powinien wyglądać mniej więcej tak:
Nie mogę znaleźć nieznanych kolumn w dowolnym miejscu w Magento, jednak mam podstępne przeczucie, że ma to coś wspólnego z sesjami / pamięcią podręczną, ale nie jestem w 100% pewien. Czy może masz włączoną funkcję Redis? Jeśli tak, wyłącz i wyczyść pamięć podręczną i zobacz, jaki jest wynik.
źródło