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

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

УРАА. Я нашел решение как избавиться от белой страницы модулей в друпал 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% меньше запросов!

Комментарии

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.

13 сентября 2009 в 19:43

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

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

19 июня 2009 в 20:53

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

19 июня 2009 в 21:05

"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")

19 июня 2009 в 21:25

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

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

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

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

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

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

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

20 июня 2009 в 12:06

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

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

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

Нет.

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

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

20 июня 2009 в 22:10

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

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

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

20 июня 2009 в 23:27

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

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

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

20 июня 2009 в 23:33

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

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

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

21 июня 2009 в 6:30

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

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

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

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

21 июня 2009 в 13:45

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

13 сентября 2009 в 16:54

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

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

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

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

7 ноября 2009 в 14:47

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

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

7 ноября 2009 в 16:54

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

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

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

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

9 ноября 2009 в 5:50

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

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

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

18 ноября 2009 в 3:01

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

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

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

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

18 ноября 2009 в 17:46