четверг, 21 марта 2013 г.

Синхронизация сайтов Drupal. Staging в процессе разработки.

Укаждого свой метод синхронизации сайтов, всё зависит от задач. Это частичный перевод отработанной статьи. Данный метод помогает синхронизовать данные с реальным сайтом для  дальнейшей доработки на другом месте. Синхронизация проходит в следующие этапы: обновления кода, обновление базы данных, обновление файлов. Эсли всё настроить и отработать, можно собрать всё в один скрипт. Тогда у нас получится изящное решение синхронизации сайтов в одну команду.
Подтягиваем файлы с репозитория.
git pull
Синхронизируем базу данных.
drush sql-sync @dev.mysite @local.mysite --sanitize
Синхронизируем файлы.
drush rsync @dev.mysite:%files/ @local.mysite:%files

Файлы синхронизируются при помощи команды rsync. Rsync намного разумнее чем FTP. Rsync  переносит только те файлы, которые были изменены. Практично, я не ставил rsync, в другой документации, всё сработало без лишних настроек на Ubuntu 12.04. SSH мощная утилита, в ней есть много различных вспомогательных утилит, есть предположение, что функцианал rsync там тоже есть, Drush работает через SSH d данном случае.

Если вы выполните
drush rsync @dev.mysite @local.mysite
для целого сайта, не отделяя директории пользовательских файлов. Тогда Drush синхронизирует все файлы. Это можно делать когда вы не используете систему контроля версий кода. Drush достаточно разумный, он достаточно разумно синхронизирует сайт так, что-бы ничего нужного не затереть к примеру settings.php.
Также  можете использовать параметр --sanitize с командой sql-sync. Данная команда синхронизирует базы данных, проводит очистку данных в базе данных, которые не нужны на других версиях сайта для разработки: обнуляет почтовые адресса, пароли.
Но для того, что бы это всё заработало надо  подготовить синонимы к работе. Положем файл синонимов в домашний каталог ~/.drush. Файл синонимов можно разместить в других местах, или указать какой именно файл использовать, данную информацию можно найти на других источниках.

1. Создаем директорию  ~/.drush .
2. Создаем файл синонимов sasha_mebel.aliases.drushrc.php в каталоге .drush .
3. Добавьте следующий код. Подкорректируйте его под свои необходимости.

 "/var/www/sasha_mebel/drupal",
  'uri' => 'site',
  'db_url' => 'mysql://root:@localhost/' . $PROJECT_NAME,
  'databases' => array (
    'default' => array (
      'default' => array (
        'driver' => 'mysql',
        'username' => 'root',
        'password' => '',
        'port' => '',
        'host' => 'localhost',
        'database' => 'sasha_mebel', 
      ),
    ),
  ),
  'path-aliases' => array(
    '%dump' => $DP . '/drupal/sites/site/private/' . $PROJECT_NAME . '.sql',
    '%files' => $DP . '/drupal/sites/site/files',
    '%private' => $DP . 'sites/site/private',
  )
);

//this is the alias for the remote development site
$aliases['live'] = array(
  'root' => "/home/vlikin/www/sasha_mebel/drupal",
  'uri' => 'site',
  'remote-host' => 'sasha-mebel.in',
  'remote-user' => 'vlikin',
  'databases' => array (
    'default' => array (
      'default' => array (
        'driver' => 'mysql',
        'username' => 'sasha_mebel',
        'password' => '',
        'port' => '',
        'host' => 'localhost',
        'database' => 'sasha_mebel', 
      ),
    ),
  ),
  'path-aliases' => array(
    '%drush-script' => $REMOTE_DP . '/tools/drush/drush',
    '%dump' => $REMOTE_DP . '/drupal/sites/site/private/' . $PROJECT_NAME . '.sql',
    '%files' => $REMOTE_DP . '/drupal/sites/site/files',
    '%private' => $REMOTE_DP . 'sites/site/private',
  )
);

Очистите весь кэш.
drush cc all
Лекарство от всех болезней – зелёнка.
Будьте вниматели – db-url, db_url, databases может меняться от версии Drupal. В данном случае этот метод работал на Ubuntu+Nginx+Drupal8+.... Специально утилиту rsync я не устанавливал и не настраивал. На Pantheon рекомендуют использовать rsync место Drupal rsync.

Данная статья является обработаным переводом.Спасибо за внимание и понимание!

1 комментарий:

  1. Не забудьте настроить авторизацию SSH по публичному ключу.

    ОтветитьУдалить