Przede wszystkim tak, to kolejne pytanie / temat dotyczący kolejki e-mail 1.9.1. Ale to nie jest temat o problemach cron (jak ten lub ten ) lub o nowej funkcji kolejki nie są używane (jak ten ).
W naszym przypadku mieliśmy problem z tym, że kolejka ( core_email_queue
i core_email_queue_recipients
) po prostu nie otrzymywała żadnych e-maili o nowych zamówieniach lub aktualizacjach zamówień, a zatem nie wysyłano już żadnych e-maili w związku z zamówieniami, również cron działa idealnie i ręcznie dodaje e-maile do kolejka działa i zostają wysłani.
Dziwne jest to, że w naszym środowisku testowym wszystko działało. Nawet kiedy dzisiaj zaczęliśmy działać w ciągu pierwszych minut, wszystkie e-maile zostały przetworzone, ale po kilku minutach (oczywiście bez żadnych dalszych modyfikacji w systemie na żywo) nie pojawiły się żadne nowe e-maile w kolejce. Wygląda na to, że tak się stało (ale nie jestem tego pewien), kiedy pierwszy klient użył PayPal Express, którego wcześniej nie testowaliśmy: - / I rzeczywiście używaliśmy niestandardowych przesłonięć w logice PayPal Express ze starą sendNewOrderEmail()
funkcją. Ale nie mogliśmy ponownie uruchomić wiadomości e-mail, nawet po ich poprawieniu queueNewOrderEmail()
.
Pierwsze pytanie brzmiałoby: czy możliwe jest, że stara funkcja wywołała pewną niespójność, która „zepsuła się” kolejka e-mail? A może to tylko wielki zbieg okoliczności i istnieje zupełnie inne wytłumaczenie?
Ponieważ nie mogliśmy znaleźć problemu, ale oczywiście potrzebowaliśmy ponownie e-maili, jak najszybciej, postanowiliśmy zastąpić inny rdzeń. W Mage_Core_Model_Email_Template_Mailer
(oczywiście w kopii w local
) skomentowaliśmy linię 76: ->setQueue($this->getQueue())
Wydaje się, że omija ona kolejkę i wszystkie wiadomości są ponownie wysyłane w stary sposób.
Jednakże, ponieważ chcielibyśmy ograniczyć liczbę zastąpień rdzenia do minimum, a także nie możemy w tej chwili powiedzieć, czy napotkamy jakiekolwiek inne skutki uboczne, jakiekolwiek inne wskazówki lub rozwiązania od osób z głębszym zrozumieniem kodu magento i mile widziane będą kolejki e-mail.
Aktualizacja do wersji 1.9.2: Po aktualizacji do wersji 1.9.2 ponownie przyjrzeliśmy się kolejce e-mail i nie byliśmy w stanie odtworzyć problemu. Ponieważ jednak nadal nie mamy pojęcia, na czym polegał problem z wersją 1.9.1, a ponieważ nadpisywanie Mage_Core_Model_Email_Template_Mailer::send()
nadal działa w opisany tutaj sposób, nadal nie korzystamy z kolejki. W ten sposób mamy nadzieję, że po jakimś czasie produkcji nie powtórzymy tego samego problemu.
tl; dr: Kolejka e-mail nie działa w wersji 1.9.1, komentowanie linii 76 w Mage_Core_Model_Email_Template_Mailer
kolejce pomija kolejkę e-mail i e-maile są wysyłane ponownie, ale nie wydaje się to dobrym rozwiązaniem. Jak można to lepiej rozwiązać?
źródło
exception.log
ewentualniesystem.log
, czy są jakieś tropy tam?core
itp., Aby upewnić się, że wszystko, co nie jest dostosowane lub rozszerzenie jest na miejscu i niezmodyfikowany i tak jest). Uprawnienia są zgodne ze starą konfiguracją, a dzienniki / raporty są czyste.core_email_queue_send_all
także uruchamianie co minutę i od miejsca, w którym widzimy, że faktycznie zostanie wykonany.Odpowiedzi:
Domyślam się, że ustawienie cron.php do uruchamiania co minutę spowodowało, że wiele rzeczy stoi na sobie, tzn. Nie kończy się przed wykonaniem następnego zaplanowanego zadania o tym samym charakterze lub podobnym. Ponieważ oba pliki cron.php nie byłyby świadome każdego stanu. Ten sam rekord można spróbować dwukrotnie, powodując jakiś dziwny wyjątek, który przerywa wysyłanie wiadomości e-mail w kolejce.
To powiedziawszy, są
Mage::Log
wyjątki w kolejce Mailer, więc upewnienie się, że rejestrowanie jest włączone, byłoby najlepszym krokiem, aby pomóc ustalić, czy są jakieś wyjątki. Rozsądnie jest też po prostu uruchomićphp -f cron.php
z interfejsu CLI, aby sprawdzić, czy generuje on również wyjątki, być może nie widzisz go za kulisami.Zacznę też od prostego
mail()
testu PHP, aby upewnić się, że nie masz żadnych zasad dotyczących spamu. Tylko dla pewności, że to nie jest coś niższego na stosie, co powoduje problem.Tylko spekulacje, mam nadzieję, że to pomoże!
* EDYTOWAĆ *
Użyj
cron.sh
zamiastcron.php
jak to zrobi,grep ps
aby sprawdzić, czy poprzedni proces już działa.źródło
Sprawdź, czy core_email_queue i core_email_queue_recipients ma AUTO_INCREMENT. Jeśli tabela nie ma włączonej sztucznej inteligencji, nie będzie przyjmować nowych wpisów.
źródło