Тонкая настройка почты
Столкнулся с тем, что при добавлении топиков, происходят достаточно сильные тормоза. После проведённого анализа выяснилось, что проблема тормозов ПОЧТА. При публикации топика происходит рассылка по всем пользователям, которые имеют отношение к блогу, в который происходит размещение материала.
При включении отложенной рассылки, всё приходит в порядок, но есть один очень не маловажный момент. Письма о регистрации, активации аккаунта или напоминания пароля, должны приходить незамедлительно.
Предлагаю к вашему вниманию следующий фикс.
В конфиге config/config.local.php добавляем следующие настройки
Далее исправляем файл classes/modules/notify/Notify.class.php
Находим в нём функцию
В этой функции находим строчку
И заменяем её на
PS: Возможно разместил топик не в тот блог, но в другие писать к сожалению не могу. Видимо не хватает рейтинга или силы.
Небольшое дополнение:
Кто-то может забыть, поэтому напоминаю, что необходимо по крону запускать скрипт include/cron/notify.php
есть 2 варианта запуска.
1. используя HTTP.
для этого необходимо поправить .htaccess в папке include/cron/
содержание должно быть
вместо XXX.XXX.XXX.XXX укажите IP, с которого будет производиться HTTP запрос.
и в крон можно внести следующую запись
2. либо из консоли.
и в крон можно внести следующую запись
Пути указывайте в соответствии с настройками вашего сервера.
При включении отложенной рассылки, всё приходит в порядок, но есть один очень не маловажный момент. Письма о регистрации, активации аккаунта или напоминания пароля, должны приходить незамедлительно.
Предлагаю к вашему вниманию следующий фикс.
В конфиге config/config.local.php добавляем следующие настройки
// Указывает на необходимость использовать режим отложенной рассылки сообщений на email $config['module']['notify']['delayed'] = true; // Если опция установлена в true, систему будет собирать записи заданий удаленной публикации, для вставки их в базу единым INSERT $config['module']['notify']['insert_single'] = true; // Количество отложенных заданий, обрабатываемых одним крон-процессом $config['module']['notify']['per_process'] = 10;
Далее исправляем файл classes/modules/notify/Notify.class.php
Находим в нём функцию
public function Send($oUserTo,$sTemplate,$sSubject,$aAssign=array(),$sPluginName=null) {
В этой функции находим строчку
if(Config::Get('module.notify.delayed')) {
И заменяем её на
$isNotifyDelayed = Config::Get('module.notify.delayed'); if (($sTemplate == "notify.registration_activate.tpl") || ($sTemplate == "notify.registration.tpl") || ($sTemplate == "notify.reactivation.tpl") || ($sTemplate == "notify.reminder_code.tpl") || ($sTemplate == "notify.reminder_password.tpl")) { $isNotifyDelayed = false; } if($isNotifyDelayed) {
PS: Возможно разместил топик не в тот блог, но в другие писать к сожалению не могу. Видимо не хватает рейтинга или силы.
Небольшое дополнение:
Кто-то может забыть, поэтому напоминаю, что необходимо по крону запускать скрипт include/cron/notify.php
есть 2 варианта запуска.
1. используя HTTP.
для этого необходимо поправить .htaccess в папке include/cron/
содержание должно быть
Order Deny,Allow Deny from all Allow from XXX.XXX.XXX.XXX
вместо XXX.XXX.XXX.XXX укажите IP, с которого будет производиться HTTP запрос.
и в крон можно внести следующую запись
*/5 * * * * wget -O- http://www.livestreet.ru/include/cron/notify.php >> /dev/null
2. либо из консоли.
и в крон можно внести следующую запись
*/5 * * * * /usr/bin/php /vhosts/site.ru/www/include/cron/notify.php
Пути указывайте в соответствии с настройками вашего сервера.
Отремонтировать компьютер или ноутбук, а так же восстановить данные можно в компьютерном сервисе on-pc.ru. Вызов специалиста и предоставление гарантии будет приятным бонусом.
28 комментариев
1). Вы либо не внесли все описанные здесь изменения
2). У вас проблемы непосредственно с доставкой почты
3). У вас пилинная версия движка, где не соответствуют название шаблонов notify.registration_activate.tpl, notify.registration.tpl, notify.reactivation.tpl, notify.reminder_code.tpl, notify.reminder_password.tpl
P.S. Я на основе этих изменения даже микро-плагин написал, чтобы код движка не ломать: inherits от Notify, метод Send переписать, список шаблонов писем, которые нужно всегда синхронно отсылать — в config.php плагина.
я правильно понял, что это нужно добавить на сервере в /etc/crontab?
нужно оставлять такое содержание или пользователя нужно прописать от которого запускать?
Странно, что при таких данных хостинга:
php_value memory_limit 512M
скрипт рассылки виснет наглухо, не в состоянии подкачать задание в prefix_notify_task
Дает ошибку: Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 71846183 bytes) in .../engine/lib/external/DbSimple/Generic.php on line 775
Мне говорит хостер, что скрипт кривой рассылки, поэтому так много потребляет…
Ошибка:
SQL Error: MySQL server has gone away at .../classes/modules/notify/mapper/Notify.mapper.class.php line 82
Array ( [code] => 2006 [message] => MySQL server has gone away [query] => INSERT INTO prefix_notify_task ( user_login, user_mail, notify_subject, notify_text, date_created, notify_task_status ) VALUES
При том, что на 2000 подписчиках все работало. Складывается впечатление, что реально дерьмоскрипт этот рассыльщик…
конфиг $config['module']['notify']['insert_single'] надо поставить в положение false
Вообще-то стоило бы где-то это прописать разработчику…
github.com/livestreet/livestreet/blob/1.0.3-replication/config/config.php#L231