Белая страница модулей: решено навсегда

Главные вкладки

Аватар пользователя joomler joomler 19 июня 2009 в 19:46

УРАА. Я нашел решение как избавиться от белой страницы модулей в друпал 6 (=медленная загрузка модулей).

В подобных темах советуют править php.ini . увеличивать объем памяти и тп.
Но этот лучше:

http://drupal.org/node/342020

а именно: открываем файл \www\modules\system\system.admin.inc

строка 621, находим там

и заменяем на

if ($form_state['post']) {
  drupal_rebuild_theme_registry();
  node_types_rebuild();
  menu_rebuild();
  cache_clear_all('schema', 'cache');
}

ВСЕ ПАШЕТ!!! пишут что на 90% ускорение. те на 90% меньше запросов!

Комментарии

Аватар пользователя Myron Myron 13 сентября 2009 в 19:43

RxB wrote:
кагбе править ядро, караемо богом

У меня при попытке использовать на локалхосте с Wamp и заходе на страницу модули выдает кучу ошибок, которых до этого не было
warning: uasort() [function.uasort]: The argument should be an array in C:\wamp\www\modules\system\system.admin.inc on line 629.
warning: Invalid argument supplied for foreach() in C:\wamp\www\modules\system\system.admin.inc on line 645.
warning: Invalid argument supplied for foreach() in C:\wamp\www\modules\system\system.admin.inc on line 660.
warning: Invalid argument supplied for foreach() in C:\wamp\www\includes\form.inc on line 1200.
warning: Invalid argument supplied for foreach() in C:\wamp\www\modules\system\system.admin.inc on line 2029.
warning: ksort() expects parameter 1 to be array, null given in C:\wamp\www\modules\system\system.admin.inc on line 2035.
warning: Invalid argument supplied for foreach() in C:\wamp\www\modules\system\system.admin.inc on line 2039.

Аватар пользователя Geldora Geldora 19 июня 2009 в 20:53

А за счет чего улучшение???

И почему его нет в ядре - если это так просто? Какие подводные камни (ну помимо котят и хака ядра, что само по себе немало...)

Аватар пользователя Valeratal Valeratal 19 июня 2009 в 21:05

да вообще много вопросов
tracker2 , модуль работающий лучше чем стандартный, стоящий на друпалорг почему то не является ядерным

Аватар пользователя zhylik zhylik 19 июня 2009 в 21:25

"Geldora" wrote:
А за счет чего улучшение???

Обычно, при каждом открытии странички с модулями чистится некоторое кол-во кеша ([ru-api=drupal_rebuild_theme_registry]drupal_rebuild_theme_registry()[/ru-api] и [ru-api=cache_clear_all]cache_clear_all[/ru-api]('schema', 'cache')) + перезагружается вся система меню ([ru-api=menu_rebuild]menu_rebuild()[/ru-api]). Думается перезагрузка меню и занимает как раз наибольшую часть времени открытия этой странички.

После введения этого изменения перечисленные выше действия осуществляются только после того, как пользователь нажал на кнопку "Save configuration" на страничке с модулями.

"Geldora" wrote:
Какие подводные камни

Допустим пользователь наколдовал с модулями (включил/отключил), нажал на "сохранить", началось сохранение, перезагрузка меню и т.п. И вот если в этот момент происходит ошибка (превышение таймаута или еще чего-нить) и перезагрузка меню прерывается, то уже ни одна страничка сайта не откроется.

Если бы такое произошло до хака, то достаточно былоб просто перезагрузить страничку с модулями, и все бы восстановилось. После хака же для восстановления необходимо произвести отправку post данных вручную.

Ну, и плюс, если идет разработка модуля, и, к примеру, в [ru-api=hook_theme]hook_theme()[/ru-api] вписывается новый темплейт, то до хака можно было просто перезагрузить страничку с модулями, а сейчас надо жать на "save configuration")

Аватар пользователя Azerot Azerot 20 июня 2009 в 10:34

Quote:
Допустим пользователь наколдовал с модулями (включил/отключил), нажал на "сохранить", началось сохранение, перезагрузка меню и т.п. И вот если в этот момент происходит ошибка (превышение таймаута или еще чего-нить) и перезагрузка меню прерывается, то уже ни одна страничка сайта не откроется.

Ну для такой ситуации можно предусмотреть страничку, на которой осуществляется просто голимые вызовы, которые фиксят ситуацию, типа /admin/repair

Мэтры, если всё так хорошо как пишут, то почему бы не озаботится проталкиванием в ядро?

Аватар пользователя Dan Dan 20 июня 2009 в 12:06

"Azerot" wrote:
Ну для такой ситуации можно предусмотреть страничку, на которой осуществляется просто голимые вызовы, которые фиксят ситуацию, типа /admin/repair

Зачем придумывать костыли к костылям? Вы что, на страницу модулей смотрите каждые 15 минут? Эта страница мало посещаемая и она уже является "/admin/repair" Smile

Разве на локальном тестовом сайте можно на неё часто захаживать, ну её можно и поправить как описал топик стартер, а рабочие сайты - пусть будет как есть.

Аватар пользователя Azerot Azerot 20 июня 2009 в 12:07

Насколько я понимаю дело не только в модулях, но и во всей админке, нет?
Опять же, если данный фикс позволяет избежать возможных проблем, то почему бы нет даже для модулей?

Аватар пользователя Dan Dan 20 июня 2009 в 22:10

"Azerot" wrote:
Насколько я понимаю дело не только в модулях, но и во всей админке, нет?

Нет.

"Azerot" wrote:
Опять же, если данный фикс позволяет избежать возможных проблем, то почему бы нет даже для модулей?

Пока проблема одна - неподходящий хостинг. А "возможные проблемы" возникнут после патча.

Аватар пользователя Azerot Azerot 20 июня 2009 в 22:20

Хм. Тогда встречное предложение - нельзя ли как-то заставить Drupal анализировать ситуацию, когда ему может не хватить памяти и соответственно вместо белого экрана выдавать осмысленное сообщение?

Аватар пользователя Dan Dan 20 июня 2009 в 23:27

Это не друпалу, а PHP не хватает памяти. Может быть можно это сделать с помощью исключений, только, опять же, это дополнительные расходы. И какой смысл? Если была хоть раз белая страница - увеличивай память.

Аватар пользователя Химический Али Химический Али 20 июня 2009 в 23:33

Недавно натыкался на нечто и в составе этого нечто было средство для диагностики WSoD'ов. Щас поищу.

Ну как всегда: http://www.drupal.ru/node/26963

Прошу не забывать также, что не все WSOD`ы одинаковы. Например, к белому экрану может привести неверная кодировка одного из файлов шаблона или наличие BOM-сигнатуры в нем.

Аватар пользователя v1adimir v1adimir 21 июня 2009 в 6:30

Химический Али wrote:
Недавно натыкался на нечто и в составе этого нечто было средство для диагностики WSoD'ов. Щас поищу.

Ну как всегда: http://www.drupal.ru/node/26963
...

Эта штука, к сожалению, сама проблемы вызывает.

Аватар пользователя Azerot Azerot 21 июня 2009 в 0:24

Не только. К белому экрану могут привести неправильные права доступа в CGI и fastCGI режимах, а также исполнение заZend'его PHP в окружении, где не установлен Zend.

Аватар пользователя Dan Dan 21 июня 2009 в 13:45

"v1adimir" wrote:
Эта штука, к сожалению, сама проблемы вызывает.

Это же не для продакшен! Она подменяет системные вызовы друпал.

Аватар пользователя Toha123 Toha123 13 сентября 2009 в 16:54

реально помогло))! Спасибо! На Freezoka хостинге только 24мб памяти для пхп, хоть так до модулей добрался)

Аватар пользователя PinkRabbit PinkRabbit 7 ноября 2009 в 14:47

Здравствуйте,

аналогичная проблема, срочно нужна помощь.
Вначале появлялось только белое окно на странице модулей,
Но у меня теперь не грузится не только панель модулей, но и ВСЁ в администраторском разделе, даже страница Управление.

Сайт находится на хостинге, править настройки php не могу.

P.S. вчера включил кеширование для одного из views, могло ли это повлиять?

Аватар пользователя PinkRabbit PinkRabbit 7 ноября 2009 в 16:54

Вроде решил.
Ошибка появилась после включения модуля update (он до этого был выключен)
После удаления(да, тупого удаления) update все снова забегало.

Никому, конечно, не рекомендую, но вдруг.

Аватар пользователя v1adimir v1adimir 9 ноября 2009 в 6:13

Тряси хостера. Скорее всего, он тебе закрыл исходящие запросы на 80-й порт отсюда и проблема. А модуль слишком полезный, чтобы им жертвовать.

Аватар пользователя Dan Dan 9 ноября 2009 в 5:50

"PinkRabbit" wrote:
Никому, конечно, не рекомендую, но вдруг.

И зря! Этот модуль - полезная штука, а то что он подвесил Ваш хостинг - это проблемы хостинга, а не модуля.

Аватар пользователя PinkRabbit PinkRabbit 18 ноября 2009 в 3:01

Тряси хостера. Скорее всего, он тебе закрыл исходящие запросы на 80-й порт отсюда и проблема. А модуль слишком полезный, чтобы им жертвовать.

Увы. Спасибо за совет, но, видимо, причина - собственные руки и голова.
Белый экран стал снова появляться, даже на обычных страницах. Установил WSoD - он говорит, что все дело в нехватке памяти.

Вот у меня и вопрос к опытным товарищам - зачем друпалу 20 мб памяти, если на сайт никто не заходит (1-2 посещения в день), а конфигурировать его я перестал дня 4 назад?
Откуда берется такая утечка памяти?

Аватар пользователя v1adimir v1adimir 18 ноября 2009 в 3:25

утечка здесь совсем непричем. это нормальное пиковое потребление памяти под законные нужды PHP интерпретатора. и количество зависит не от количества посетителей, а от объема перерабатываемого кода, то есть включенных модулей.

Аватар пользователя Dan Dan 18 ноября 2009 в 17:46

"PinkRabbit" wrote:
Вот у меня и вопрос к опытным товарищам - зачем друпалу 20 мб памяти, если на сайт никто не заходит (1-2 посещения в день), а конфигурировать его я перестал дня 4 назад?
Откуда берется такая утечка памяти?

Почитайте как работает web-сервер. Для каждого пользователя создаётся новый поток (по сути - новый web-сервер), который после генерации и отдачи станицы клиенту уничтожается.
20мб - это мало. Ищите другой хостинг или конфигурируйте локально, а на рабочем сервере - кэширование (хотя если работаете с изображениями всё равно не хватит).