[Решено] Локальная копия сайта на Drupal 7

Аватар пользователя acoder acoder 20 июня 2011 в 12:10

Есть сайты на Drupal 7. Они работают. Требуется выполнять на них доработки. Чтобы не экспериментировать с живых сайтах я обычно делаю локальные копии на Denwer. Меняю что нужно в коде, а потом уже выкладываю измененные файлы в сеть. Так вот с другими движками не сталкивался с проблемой при этом, а вот на Drupal не получается делать локальные копии. Может какие хитрости есть? Подскажите пожалуйста.

Порядок следующий:
- Копирую все папки и файлы сайта.
- Создаю бекап базы (использую dumper).
- Поскольку Drupal любит прописывать в базе полные пути сайта, то открываю бекап базы текстовым редактором Notepad++ и делаю автозамену всех ссылок. Типа если адрес сайта site.ru, а локально он будет работать под именем site-test.ru, то именно так и меняю одно на другое.
- Восстанавливаю измененный бекап базы.
- Захожу в админку локального сайта и сбрасываю кеш.

Все вроде бы замечательно. Локальный сайт в целом работает. Однако появляются ошибки типа:
Notice: unserialize(): Error at offset 23 of 30 bytes in variable_initialize() (line 748 of /var/www/site-test.ru/includes/bootstrap.inc).
Если перегрузить страницу, то ошибка исчезает.

Комментарии

Аватар пользователя Lotar Lotar 20 июня 2011 в 12:23

Не страшно это. Хранит он старые значения. Кеш почистили все убралось.

Аватар пользователя acoder acoder 20 июня 2011 в 12:35

Lotar wrote:
Не страшно это. Хранит он старые значения. Кеш почистили все убралось.

Если вы об ошибке, то у меня она остается после сброса кеша.

Аватар пользователя acoder acoder 20 июня 2011 в 12:50

G.A. Vinogradov wrote:
Ну вот из-за автозамены такое и происходит. Вы ломаете "сериализованные" значения.

Так а по-другому то как? Без автозамены например картинки в статьях не открываются. Ссылки везде...

Похоже нашел решение. Случайно. ) Нужно было зайти в админку: Настройки - Информация о сайте.
Здесь проверить чтобы все было заполнено, но даже если все на месте, все равно нажать сохранение настроек.

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

Аватар пользователя ihappy ihappy 20 июня 2011 в 12:53

"acoder" wrote:
Все вроде бы замечательно. Локальный сайт в целом работает. Однако появляются ошибки типа:
Notice: unserialize(): Error at offset 23 of 30 bytes in variable_initialize() (line 748 of /var/www/site-test.ru/includes/bootstrap.inc).
Если перегрузить страницу, то ошибка исчезает.

Это не ошибка. Это уведомление. В принципе можно игнорить.

"acoder" wrote:
- Поскольку Drupal любит прописывать в базе полные пути сайта, то открываю бекап базы текстовым редактором Notepad++ и делаю автозамену всех ссылок. Типа если адрес сайта site.ru, а локально он будет работать под именем site-test.ru, то именно так и меняю одно на другое.

Это излишние.

"acoder" wrote:
Порядок следующий:
- Копирую все папки и файлы сайта.
- Создаю бекап базы (использую dumper).
- Поскольку Drupal любит прописывать в базе полные пути сайта, то открываю бекап базы текстовым редактором Notepad++ и делаю автозамену всех ссылок. Типа если адрес сайта site.ru, а локально он будет работать под именем site-test.ru, то именно так и меняю одно на другое.
- Восстанавливаю измененный бекап базы.
- Захожу в админку локального сайта и сбрасываю кеш.

1.Сайт перевести в режим обслуживания.
2.Отключить модули и кеширование на сайте.
3.Запаковать(если есть возможность в админке) и скопировать все файлы по фтп на комп. Можно и не паковать, но так дольше.
4. Создать дамп через phpMyAdmin или другими средствами. Dumper не советую, у меня лично он постоянно глючит.
5.Залить на лок.комп файлы и базу данных штатными средствами денвера.
6.В файле settings.php изменить запись:
$databases = array('default' => array( 'default' => array(
'driver' => 'mysql',
'database' => 'ИМЯ_БАЗЫ',
'username' => 'ИМЯ_ПОЛЬЗОВАТЕЛЯ',
'password' => 'ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ',
'host' => 'localhost',
'prefix' => 'ПРЕФИКС_ЕСЛИ ЕСТЬ',
'collation' => 'utf8_general_ci',
)));
7. Проделать пункты 1/2 в обратном порядке.

Должно работать.

Вносить в БД изменения не надо. Dumper-ом не пользоваться.

Аватар пользователя acoder acoder 20 июня 2011 в 13:04

"iHappy" wrote:
Это излишние.

С отображением картинок у вас нет проблем, если это не делать?

"iHappy" wrote:
2.Отключить модули и кеширование на сайте.

А при отключении модулей их таблицы в базе (если есть) и настройки (если есть) разве никак не задеваются?

"iHappy" wrote:
4. Создать дамп через phpMyAdmin или другими средствами. Dumper не советую, у меня лично он постоянно глючит.

Dumper меня еще не подводил. Я им паковал и распаковывал даже базы по 250-300 Мб, а вот с phpMyAdmin даже на относительно небольших базах бывали сложности.

Аватар пользователя acoder acoder 20 июня 2011 в 13:05

"RxB" wrote:
Надо же, друпал любит, а я думал вы сами вставляете картинки с полными путями

Я не вставляю сам. Использую модуль Insert и оно само вставляется с полными путями. Я сам вначале этому сильно удивился.

Аватар пользователя ihappy ihappy 20 июня 2011 в 13:12

"acoder" wrote:
С отображением картинок у вас нет проблем, если это не делать?

Нет.

"acoder" wrote:
А при отключении модулей их таблицы в базе (если есть) и настройки (если есть) разве никак не задеваются?

Нет. Настройки/таблицы в бд удаляются только при удаление модуля в вкладке "Удалить".
отключать можно не боясь.

"acoder" wrote:
Dumper меня еще не подводил. Я им паковал и распаковывал даже базы по 250-300 Мб, а вот с phpMyAdmin даже на относительно небольших базах бывали сложности.

Я сам им пользуюсь редко. Так как лучше дамбить самими средствами mysql. Они меня не подводили.
Правда меня не подводил и phpmyadmin. А вот dumper почемуто, всегда БД сливать/заливает с ошибками.
почему хз. но два раза так произошло и я больше им не пользуюсь.

"acoder" wrote:
Я не вставляю сам. Использую модуль Insert и оно само вставляется с полными путями. Я сам вначале этому сильно удивился.

Это "баг" модуля. Или у разработчика руки из места для сранья растут.

Аватар пользователя acoder acoder 20 июня 2011 в 14:18

"iHappy" wrote:
Это "баг" модуля. Или у разработчика руки из места для сранья растут.

Автор модуля, как выяснилось, специально сделал чтобы вставлялись полные ссылки. Его просили добавить настройку хотя бы в модуле, т.к. оно не всем надо, но он принципиально не хочет. Smile http://drupal.org/node/640352 Объясняет это тем, что так не будет проблем с картинками в RSS.

Аватар пользователя ihappy ihappy 20 июня 2011 в 15:59

"k-s" wrote:
Кстати, а зачаем модули отключать?

Точно не скажу. Но я думаю, чтобы при дамбе базы, не производились записи в бд.

Аватар пользователя Valer Valer 20 июня 2011 в 16:03

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

Правда в режим обслуживания сайт не перевожу и модули не отключаю. Само архивирование достаточно быстро происходит.

Аватар пользователя acoder acoder 21 июня 2011 в 6:23

"Valer" wrote:
Чтобы абсолютные пути корректно изменялись при переносе на тестовый сайт я пользую pathologic

Костыль? Wink Вообще я все же хочу избавится от абсолютных путей. Это не правильно. Их не должно быть. На других движках такого изврата у меня нигде нет, и RSS при этом нормально с картинками работает. Все решается более правильным способом.

"Valer" wrote:
Вообще конечно, тестовый сайт лучше всегда иметь под рукой в актуальном состоянии. Поэтому чтобы много времени не тратить на обновление написал два скрипта, один на сервере раз в сутки ночью делает резервную копию в архив, а другой на локальной машине запускаю чтоб он обновил файлы и базу из заархивированной копии.

Трудно не согласиться. Актуальная копия - это хорошо. Главное не забыть потом, что локально могли быть сделаны какие-то доработки и поскольку они небыли внедрены сразу, они удачно затерты при очередном обновлении. Чтобы так не пролететь по-моему лучше обновлять то, что меняется. Т.е. каталоги с upload и базы.

Аватар пользователя Valer Valer 21 июня 2011 в 10:27

"acoder" wrote:
Костыль? Wink Вообще я все же хочу избавится от абсолютных путей. Это не правильно. Их не должно быть. На других движках такого изврата у меня нигде нет, и RSS при этом нормально с картинками работает. Все решается более правильным способом.

Как можно по другому сделать? Если в содержимом относительные пути а в RSS нужны абсолютные?

Аватар пользователя acoder acoder 21 июня 2011 в 10:32

"Valer" wrote:
Как можно по другому сделать? Если в содержимом относительные пути а в RSS нужны абсолютные?

Это особенность именно RSS и именно данная функция должна преобразовывать ссылки так как ей это нужно. Сделать элементарно. Контент должен быть без излишеств.

Аватар пользователя acoder acoder 21 июня 2011 в 10:36

PS: Я не понял как использовать pathologic. Уж по всякому его настройки крутил, но он никак у меня не меняет ссылки. Редактор у меня CKEditor, пробовал добавлять в список адресов /, как рекомендуется в руководстве, но все равно нулевой результат. Странно.

Аватар пользователя Valer Valer 21 июня 2011 в 11:32

acoder wrote:
PS: Я не понял как использовать pathologic. Уж по всякому его настройки крутил, но он никак у меня не меняет ссылки. Редактор у меня CKEditor, пробовал добавлять в список адресов /, как рекомендуется в руководстве, но все равно нулевой результат. Странно.

Да, в путях указывается - /, ставится опция "возвращать абсолютные пути", в списке фильтров pathologic ставится последним. Зайти в редактирование ноды и пересохранить.

Аватар пользователя acoder acoder 21 июня 2011 в 11:44

"Valer" wrote:
Да, в путях указывается - /, ставится опция "возвращать абсолютные пути", в списке фильтров pathologic ставится последним. Зайти в редактирование ноды и пересохранить.

Спасибо, но не работает. Абсолютные и относительные пути как были у картинок, так и остались.

Аватар пользователя Valer Valer 21 июня 2011 в 11:57

acoder wrote:
"Valer" wrote:
Да, в путях указывается - /, ставится опция "возвращать абсолютные пути", в списке фильтров pathologic ставится последним. Зайти в редактирование ноды и пересохранить.

Спасибо, но не работает. Абсолютные и относительные пути как были у картинок, так и остались.

pathologic не меняет содержимое нод, исходные ссылки остаются прежние. Он только меняет ссылки при выводе ноды в режиме просмотра.

Аватар пользователя Softovick Softovick 21 июня 2011 в 11:56

acoder- wrote:
Создаю бекап базы (использую dumper).

Используйте Sypex Dumper 2 версии, а не первой - будет щастье.
acoder- wrote:

- Поскольку Drupal любит прописывать в базе полные пути сайта, то открываю бекап базы текстовым редактором Notepad++ и делаю автозамену всех ссылок. Типа если адрес сайта site.ru, а локально он будет работать под именем site-test.ru, то именно так и меняю одно на другое.

С чего вдруг? По умолчанию он это совсем не любит, у него все ссылки обычно относительные, без указания домена. Другой вопрос, что у вас может быть настроено что-то так, что прописывается полная ссылка. Например прикрепляемые файлы, там да, может быть полный путь.

Аватар пользователя natbampo natbampo 21 июня 2011 в 12:04
UPDATE имя_таблицы SET имя_поля_Х = REPLACE(имя_поля_Х, 'заменяемое', 'заменяющее') WHERE имя_поля_Х LIKE '%заменяющее%'
Аватар пользователя acoder acoder 18 июля 2011 в 8:58

Заменять следует более конкретно адреса. Не просто site.ru на site-test.ru, а полная ссылка с каталогами, где расположены картинки. Ведь проблема именно в картинках. Проще делать это не в редактора а в phpmyadmin. Например для текстов нод команда следующая:
UPDATE field_data_body SET body_value = REPLACE(body_value, 'http://site.ru/sites/default/files', 'http://site-test.ru/sites/default/files') WHERE 1;

В этом случае ничего лишнего не заменяется и все работает как надо. Кеш только не забывайте сбрасывать.