andribas@drupal.org: Блог

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

Тестирование Drupal

2 декабря 2014 в 14:12

Здравствуйте!
Решил поучаствовать в тестировании Drupal (версия 7)
Подскажите какие у них используются настройки окружения?
Я правильно понимаю, что перед тем как выпустить релиз, сначала он должен пройти https://qa.drupal.org/pifr/status и не быть ни одной ошибки?
Считаются ли Notices ошибками?
у меня много тестов не проходит
например, filter_xss:

sudo -u www-data php scripts/run-tests.sh --php /usr/bin/php --url http://seed.local/ --color --class FilterUnitTestCase

Drupal test run
---------------

Tests to be run:
 - Filter module filters (FilterUnitTestCase)

Test run started:
 Tuesday, December 2, 2014 - 15:49

Test summary
------------

string(20) "<img src="alert(0)">"
string(39) "<img src=" &#14;  javascript:alert(0)">"

Просьба оценить сайт

23 октября 2014 в 8:00

Здравствуйте!
просьба оценить сайт
с точки зрения что неправильно/непонятно/неудобно сделано.
Контент еще не до конца наполнен и в трекере осталось 7-10 задач доделать по нему.
Хотелось бы услышать взгляд со стороны.
Также хочется отметить, что сайт некоммерческий, сделан без бюджета на дизайн)

ajax_comments и mollom не работают вместе

28 апреля 2011 в 9:17

Здравствуйте!
кому-нибудь удалось подружить ajax_comments и mollom?
уже 2 года прошло вроде - http://drupal.org/node/353607

Сайт санатория

13 апреля 2011 в 19:12

Здравствуйте!
Оцените, пожалуйста, сайт, санаторий Еловое
Он простой, 20 страниц, минимум модулей, тема - субтема гарланда.
Как Вам?

Кеширование в друпал

28 декабря 2010 в 11:30

Статья незаконченная, на праздниках буду проводить benchmark и постараюсь реализовать идею, которую здесь описал.

Итак, Вы установили друпал, настроили сайт и запустили.
Но некоторые страницы отдаются медленно или сервер не справляется с нагрузкой.
Что можно сделать в друпале, чтобы ускорить отдачу?

1. Рассматриваем установку с nginx + php_fpm, где Apache отсутствует.

2. Включаем кеширование блоков в друпал, кеширование страниц пока выключено.

3. Помещаем opcode в кеш, для этого используется APC. Drupal со всеми модулями занимает порядка 40 Мб в памяти.

4. Помещаем все таблицы cache* в память - здесь варианта 2 - CacheRouter или Memcache API. Каждый из этих модулей имеет свои преимущества - в CacheRouter реализовано много хранилищ - Вы можете использовать разные для разных таблиц, БД, APC, memcached, file. Однако, если говорить о высокой нагрузке, то хранилище будет memcached. Преимущество Memcache API заключается в том, что этот модуль умеет хранить в памяти кроме cache* таблиц еще и sessions - как показали наблюдения за сайтом, в эту таблицу много пишется, поэтому в кеше работа с ней будет быстрее и снизит нагрузку.

В принципе уже это позволит сайту работать быстро, и большинство устроит. Что же можно сделать еще? Вот какие есть варианты:

1. Использовать boost - этот модуль позволяет кешировать страницы для анонимных пользователей на диск.

Для кого предназначен: для анонимов

Как работает: при запросе анонимом страницы, если ее нет в кеше, она генерируется, помещается в кеш и следующий запрос будет обслужен из кеша.

drupal + mysql - самые "дорогие" модули

16 декабря 2010 в 11:41

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

Напишу сюда результат анализа лога mysql за примерно пол-месяца работы сайта на друпале.
О том, как нехорошо кешировать данные в mysql, я уже писал. Там рассматривалась работа CacheRouter при выборе хранилища в БД - то есть стандартное кеширование друпала.
Теперь был проведен анализ после перевода кеша в memcache.

Вот некоторая статистика:
#memcached-tool localhost stats
bytes_read 1593512968640 = 1.5 Терабайта
bytes_written 5899978353864 = почти 6 Терабайт

CacheRouter - как правильно?

22 ноября 2010 в 19:41

Здравствуйте!
Поставил CacheRouter и сделал default engine = APC
APC = 256Mb
80mb скушали скрипты, 170 осталось под кеш.
Эти 170м очень быстро скушались, и память кончилась.
Насколько я понял, в CacheRouter нет политики кеширования типа LRU, считается, что ресурс безлимитный.

Сколько ему памяти надо для кеша?
Дело тут не столько в том, что нужен прирост скорости - после того, как я сделал default engine = db,
drupal стал насиловать mysql.
Поэтому хочу спросить, могу ли я в ядре уменьшить значение $expire, к примеру до часа или двух

<?php
//    includes/form.inc
function form_set_cache($form_build_id$form$form_state) {
  global 
$user;
  
// 6 hours cache life time for forms should be plenty.
  
$expire 21600;
?>

поскольку 150Мб как-то многовато для кеша.

Ну и по сабжу, как правильно посчитать размер памяти, необходимый сабжу CacheRouter для работы, чтобы ее хватало?
Поскольку на сервере ведется бинарный лог, и за сутки он стал 8Г

Трафик 1 ø в час
Принято 15 ГБ 472 МБ
Отправлено 165 ГБ 5,181 МБ
Всего 180 ГБ 5,653 МБ

MySQL сервер работает 1 дней, 8 часов, 36 минут и 12 секунд. Время запуска: Ноя 21 2010 г., 12:53.

я его вчера перезапускал, но что-то мне эта статистика не очень нравится.
Почистил логи - reset master, за час уже наросло 400мб, откуда столько?

Как сделать по уму?

попробовал вот эту штуку, чтобы понять, вот что она пишет:

#mysqlbinlog /var/lib/mysql/mysqld.000001 | perl mysqlsla --log-type binary

Report FOR BINARY logs: -

drupal + views = медленный mysql

21 ноября 2010 в 12:03

Здравствуйте!
проанализировал работу сайта за ночь всплыли вот такие неприятности:
в slow_log попало почти 400 запросов со временем запроса, большем 1 секунды.

натравил на лог парсер
результат в конце страницы.

Получается, 3 запроса выполняются очень долго и часто, есть ли способ их оптимизировать?

1. запрос - стандартный views taxonomy_term для страницы taxonomy/term/%
среднее время запроса - 2.5 секунды
количество строк для анализа - 170к - 250к

По моему, не самый удачный запрос select * from node where vid in (...) .
И как к этому запросу добавить SQL_NO_CACHE ?
Самый тупой запрос - листалка, пока даже не знаю, как это можно оптимизировать.

2. запрос - как я понял подсчет числа нод определенного термина - это pager считает их?
среднее время запроса - 2.4 секунды

Получается, при плохом раскладе страница может генериться 2.5 (заголовки нод) + 2.4 (отрисовка пейджера) = 5 секунд??
ну, при хорошем раскладе, конечно этот запрос попадет в query_cache, только вот он засирается быстро другими запросами.
нет ли какого модуля в друпале, который кеширует статистику нода-термин в базу, пусть даже по крону, все равно?

3. запрос - views вида content/%year/%month/%day - вывод нод за дату.
среднее время запроса - 1.3 секунды.
делается проход на 340к нод - жесть.

честно говоря, мне больше нравится запрос вида
created between UNIX_TIMESTAMP('2003-08-18') and UNIX_TIMESTAMP('2003-08-19')

xmlsitemap

20 ноября 2010 в 17:11

Здравствуйте!
Поставил модуль xmlsitemap, настроил что туда помещать, запустил ребилд, очень долго, но он сделался.
Я так понял, карта сайта будет проверяться при каждом запуске крона (раз в час).
Подскажите, пожалуйста, при добавлении новых материалов они будут добавляться к существующей карте, или каждый раз по новой она будет делаться?
спасибо.

Новостной сайт

25 октября 2010 в 14:51

Рискну представить общественности http://uralpress.ru
Сайт имеет 170к+ нод, 40к+ фотографий.
Что сделано:
На выделенном сервере связка nginx + php 5.3.3
Настроен Cacherouter (APC) + Boost.
Поиск сделан на sphinx, но пока не темизирован вывод.
Еще не готовы фото галереи - хотелось бы их загружать аяксом там, где 200+ фоток в ноде.
Также готовится словарь тегов (1к+ тегов)(пока не придумал как из вывода sphinx по запросу проставлять эти теги в документах (что-то типа views bulk operations - в связи с этим очень хотелось бы видеть связку sphinx + views, а руками все это делать страшно)

Хотел бы услышать пару советов по СЕО - что сделать "внутри" сайта, чтобы по слову "Челябинск" быть в топе?

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

Был бы очень признателен сообществу за комментарии по этому сайту - что сделано плохо / неправильно на Ваш взгляд. Спасибо.

Календарь для архива

25 октября 2010 в 12:44

Здравствуйте! Помогите советом что сделать?
Есть календарь для архива http://drupal.org/project/calendar_block ,
в принципе, устраивает, грузится аяксом, ссылки настраиваются
но вот с кешированием он не дружит, и поэтому не хочет грузиться.

Когда я ставлю Кэш блоков отключено, он работает
если кеш блоков включаю - вылазит пустой блок, а дальше подгрузки аяксом нет - как это исправить?

атрибут title у ссылок [SOLVED]

21 октября 2010 в 10:58

Скажите, где можно переопределить ссылку - я так понял функция l() ?
чтобы во всех <a href="url">link</a> было добавлено title="link"?
Ее потом чистить от тегов еще надо?

Либо как это сделать во views?
у меня стоит
Выводить это поле в виде ссылки
Alt текст: 123 - работает
если пишу
Alt текст: [title] - то ничего не показывает

P.S. [created] - показывает. попробовал добавить скрытый title перед этим полем (title_1) - тоже не показывает.

и чистит ли он например от кавычек такой текст?

Подстановочные шаблоны

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

    * [created] == Материал: Дата создания
    * [title] == Материал: Заголовок

Помогите сделать вывод материалов в блоке

20 октября 2010 в 8:40

Здравствуйте!
Подскажите, пожалуйста, как можно реализовать такой вывод:

Есть 3 типа материала - сюжет, новость, статья
и словарь сюжеты.
Сюжет: фото, термин сюжеты
Новость: заголовок, фото, термин сюжеты, первый абзац (teaser)
Статья: заголовок, фото, термин сюжеты, кратко о статье (summary)

Если в сюжете указано помещать на главную, то выводятся материалы этого термина в блоке.
Еще сюжет нужен для того, чтобы хранить дефолт фото для этого термина (в новости фото может не быть)

Мне нужно выводить последние 4 (новости, статьи) в блоке

сделал 2 views с аргументом термин ID

select_main_story: первая новость / статья - заголовок, фото, первый абзац / кратко о статье
select_story: остальные 3 новости - заголовки.

Что не получается сделать:
1. Как вывести Сюжет -> фото (по термину ID) если в первой новости нет фото?
2. Мне нужен блок из 3-х сюжетов. Как это правильно сделать?

Что-то типа сначала выбрать 3 материала из сюжетов, которые указано помещать на главную
Потом из каждого материала типа сюжет выбрать фото и термин таксономии.
Далее сделать вывод views

print views_embed_view('select_main_story','default','term_id');
print views_embed_view('select_story','default','term_id');

и потом если в select_main_story отсутствует фото, то заменить его на фото по дефолту из материала типа сюжет, чтобы это фото было в виде ссылки на материал типа новость / статья из select_main_story.