Обновляем мгновенно сайты через drush

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

Аватар пользователя chel chel 7 ноября 2011 в 10:27

Решил поделиться тем что узнал, пока в кратком виде как можно быстро обновлять редакции сайтов

Допустим мы имеем сайт ( придумаем ему синоним SITE) в двух и более редакциях, например:
1) Сайт в интернете видят все люди - site.live
2) Сайт на локальной машине - site.dev

обновляем файлы сайтов вместе с модулями (откуда куда):
drush rsync --progress site.dev site.live

обновляем базы данных (при дополнительных параметрах, можно исключать/включать таблицы) (откуда куда)
drush sql-sync --no-cache site.dev site.live

обновляем только файловый контент сайтов (откуда куда)
drush rsync site.dev:%files site.live:%files
(по дефолту site/mysite.ru/files/ или sites/default/sites - кто любит плодить друпалы)

Хотим посмотреть список включенных модулей удаленного сайта
drush site.live pml --status=enabled

Хотим включить модули удаленного сайта: admin_menu authcache
drush site.live en admin_menu authcache -y

Через drush мы экономим много времени на эти операции, иначе эти операции можно выполнять вручную: ставить галочки, копировать файлы....

Теперь опишу как мы обозначаем синонимы, оригинал примера тут http://drupalcontrib.org/api/drupal/contributions--drush--examples--exam...
1. Создаем файл site.aliases.drushrc.php в любом из каталогов ~/.drush, /etc/drush, там где установлен drush, либо прописываем дополнительный путь для каталога синонимов
2. Приведу пример своего файла в котором описан сайт с двумя версиями live - живой сайт на хостинге, dev - сайт на локальной машине


<?php
$aliases
['dev'] = array(
'root' => '/var/www/drupal7/',
'uri' => 'www.mysite.local',
);

$aliases['live'] = array(
'root' => '/home/user/projects/mysite',
'uri' => 'site.ru',
'remote-host' => 'mysite.ru',
'remote-user' => 'user-hosting',
'ssh-options' => '-p2222',

'path-aliases' => array(
      
'%drush' => '/home/user/bin/drush/',
      
'%drush-script' => '/home/user/bin/drush/drush',
      
#'%root' => '/home/user/projects/site/sites/',
      
'%dump-dir' => '/home/user/projects/site/dump/',
      
'%dump' => '/home/user/projects/site/dump/sro.sql'
      
#'%files' => 'sites/site.com/files',
),
);
?>

ps Особеннно радует работа с мультисайтиногом, т.е. даже когда у вас сайты в sites/ на одной установке drupal

Синхронизируем сайты drupal через drush
от lullabot Более подробно на английском

работает ли под вендой - незнаю, т.к. не использую её

Единственное не получилось у меня обновить сайт с одно удаленного сервера на другой удаленный сервер (локальный удаленный - удаленный локальный = работает)

Комментарии

Аватар пользователя petrovnn petrovnn 7 ноября 2011 в 15:00

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

Аватар пользователя DennisVV DennisVV 8 ноября 2011 в 12:41

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

Аватар пользователя WiseMan WiseMan 8 ноября 2011 в 13:07

Вижу вы детально разобрались в drush.

Может тогда подскажите, есть ли опция типа %root (-r), только чтобы можно было указать дополнительно к папке с друпалом отдельно папку с модулями. Папка модулей лежит вне корня сайта.

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

Аватар пользователя Softovick Softovick 9 ноября 2011 в 0:57

WiseMan wrote:
Вижу вы детально разобрались в drush.

Может тогда подскажите, есть ли опция типа %root (-r), только чтобы можно было указать дополнительно к папке с друпалом отдельно папку с модулями. Папка модулей лежит вне корня сайта.

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


По моему это явный признак неправильного подхода к организации мультисайтинга....

Аватар пользователя chel chel 8 ноября 2011 в 23:23

Да не, я только начал вникать в drush)
Я бы прописал для каждой редакции site.dev site.live сайта переменные, например theme, files, modules


<?php
$aliases
['dev'] = array(
.....
'path-aliases' => array(
      
'%drush' => '/home/user/bin/drush/',
      
'%drush-script' => '/home/user/bin/drush/drush',
      
      
'%theme' => 'sites/all/themes/custom7/my_theme',
      
'%files' => 'sites/site.com/files',
      
'%modules' => '/home/var/all/modules', ),
);
?>
// Путь к файлам модуля, темам,.. Live- сайта, где лежат папки
?>

И переменные можно пользовать для синхронизации папок на которые указывают эти переменные:
drush rsync site.dev:%files site.live:%files
drush rsync site.dev:%modules site.live:%modules - будет синхронизировать с папкой /home/var/all/modules
drush rsync site.dev:%theme site.live:%theme

Что будет с симлинками незнаю, у меня при drush rsync симлинки не удаляются, а создаются к идентичным папкам и файлам, симлинки создаю коммандой ln -s %from %to

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 9 ноября 2011 в 1:37

"Softovick" wrote:
По моему это явный признак неправильного подхода к организации мультисайтинга....

Присоединяюсь к данному мнению. Почему бы не держать все модули в sites/all/modules ?

Аватар пользователя chel chel 9 ноября 2011 в 13:23

Может быть у человека к примеру одни и те же модули используются не только для drupal но и для pressflow и тут удобно было бы симлинк на общие модули /sites/all/modules

Аватар пользователя Softovick Softovick 9 ноября 2011 в 13:39

chel wrote:
Может быть у человека к примеру одни и те же модули используются не только для drupal но и для pressflow и тут удобно было бы симлинк на общие модули /sites/all/modules

Мнимое удобство. Ибо влечет частенько больше проблем, чем профита.

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 9 ноября 2011 в 14:05

"chel" wrote:
Может быть у человека к примеру одни и те же модули используются не только для drupal но и для pressflow и тут удобно было бы симлинк на общие модули /sites/all/modules

Тогда можно сделать симлинк не на отдельные модули, а так:
drupal/sites/all/modules -> pressflow/sites/all/modules

Как я понимаю, неактивные модули в sites/all/modules на производительность не влияют, почти.

Аватар пользователя WiseMan WiseMan 9 ноября 2011 в 21:22

"<a href="mailto:v1adimir@drupal.org">v1adimir@drupal.org</a>" wrote:
"Softovick" wrote:
По моему это явный признак неправильного подхода к организации мультисайтинга....

Присоединяюсь к данному мнению. Почему бы не держать все модули в sites/all/modules ?

Не спешите судить, ведь мультисайтинг бывает разным и в некоторых случаях модули размещаются в папках сайтов /sites/site.ru/modules.

Поэтому для удобства держу все модули в одном месте, а раскидываю через симлинки.

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 9 ноября 2011 в 23:29

"WiseMan" wrote:
Не спешите судить, ведь мультисайтинг бывает разным

Да никто и не судит, мы лишь спешим помочь, от чистого сердца. Заодно тайным знанием похвасться. )

Аватар пользователя WiseMan WiseMan 10 ноября 2011 в 1:56

"<a href="mailto:v1adimir@drupal.org">v1adimir@drupal.org</a>" wrote:
Да никто и не судит, мы лишь спешим помочь, от чистого сердца. Заодно тайным знанием похвасться. )

о да! )))

Аватар пользователя chel chel 13 ноября 2011 в 11:42

Использует утилиту rsync, по умолчанию конечно обновляет только новые. Но есть куча вкусных фишек http://wiki.opennet.ru/Rsync

ps: на буржуйских сайтах народ встраивает drush в yii, для удобства работы с релизами

I have been tasked to create an application with a non-Drupal PHP framework (in this case Yii) and wanted to get a debugging environment up and running ASAP. I knew the Quickstart environment worked well for Drupal, so I did the following.

1. Create a new project with

drush qc --domain=yii.dev
2. Delete all of the Drupal code under /home/quickstart/websites/yii.dev

3. Copy the files that are under the yii/demos/blog project to /home/quickstart/websites/yii.dev (where yii is the root for the yii download).

4. Copy the contents of the yii/framework directory under the /home/quickstart directory (i.e. /home/quickstart/framework). This is not really necessary, but if you do this, you don't have to change the relative references in the blog project)

5. Now you can go through the steps for setting up a debugging project with NetBeans that Michael Cole has documented so well in his videos. The same steps can be used for this Yii project, including removing the 'localhost' in the URL.

Now you can set break points in the Yii blog project and debug just like a Drupal project. Very cool! I would imagine this would work similarly for other PHP frameworks (CodeIgniter, CakePHP, Symfony, etc.) as well.

Аватар пользователя pselfin pselfin 22 ноября 2011 в 14:43

Таак...
А как на счет просто обновления кода: ядра и модулей? С модулями если все понятно, при drush -dl modulname они скачиваются и заменяют старые в sites/all/modules, а вот ядро в корень не качается (да, да, знаю, драшевцы для безопасности сделали так)... Есть способ и ядро в корень качать? Бекапы разумеется предварительно делаются и кода и бд.

Аватар пользователя Softovick Softovick 22 ноября 2011 в 14:51

<a href="mailto:P.Selfin@drupal.org">P.Selfin@drupal.org</a> wrote:
Таак...
А как на счет просто обновления кода: ядра и модулей? С модулями если все понятно, при drush -dl modulname они скачиваются и заменяют старые в sites/all/modules, а вот ядро в корень не качается (да, да, знаю, драшевцы для безопасности сделали так)... Есть способ и ядро в корень качать? Бекапы разумеется предварительно делаются и кода и бд.

Неправильно
Конкретный модуль, в том числе и core, можно указывать при использовании drush up.
НАпример drush up drupal обновит только версию Drupal и "коробных" модулей, не затрагивая сторонние модули.
Для обновления только кода есть команда drush pm-updatecode

Аватар пользователя pselfin pselfin 22 ноября 2011 в 15:15

Спасибо Леш! Учим матчасть дальше значит...
А еще вопросик: что бы все модули разом обновить, а не каждый перечислять pm-updatecode использовать?
То есть по порядку так думается: сначала ядро обновить, после все дополнительные модули...

Аватар пользователя Softovick Softovick 22 ноября 2011 в 15:30

<a href="mailto:P.Selfin@drupal.org">P.Selfin@drupal.org</a> wrote:
Спасибо Леш! Учим матчасть дальше значит...
А еще вопросик: что бы все модули разом обновить, а не каждый перечислять pm-updatecode использовать?
То есть по порядку так думается: сначала ядро обновить, после все дополнительные модули...

Если укажешь имя конкретного модуля, обновится только он. А если просто написать drush up - обновится все.

Аватар пользователя pselfin pselfin 22 ноября 2011 в 16:53

"Softovick" wrote:

Я обычно в этом случае перехожу в папку sites/site.ru и запускают оттуда.


Благодарю!!!
Только у CKEditora либа слетела (и то потому что не в all/libraries была), но это легко поправимо.

UPD: настройка панели (panels) пропала с выводом содержания... Будьте осторожны, коллеги!
UPD2: решило проблему выключение/включение модйлей panels и panels node

Аватар пользователя chel chel 25 ноября 2011 в 0:41

"<a href="mailto:P.Selfin@drupal.org">P.Selfin@drupal.org</a>" wrote:
Таак... А если settings.php расположен в sites/site.ru а не в sites/default драш не робыт?

а я делаю так:
вариант 1
захожу в папку drupal (у меня drupal6 и drupal7)
drush site.ru up (обновить модули)
drush site2.ru en blog (включаем модуль blog для сайта /sites/site2.ru) drush site2.ru en blog -y (включаем блок с автоматич.подтверждением yes)

вариант 2
если site1.ru есть на локалхосте и на хостинге, можно прописать его в алиасах drush
тогда не обязательно заходить в папку друпал или лезть на хостинг через ssh
...
drush site1ru.local up (обновляем на локалхосте)
drush site1ru.hosting up (обновляем на хостинге)

Аватар пользователя pselfin pselfin 23 ноября 2011 в 17:29

"chel" wrote:
вариант 1
захожу в папку drupal (у меня drupal6)
drush site.ru up
drush site2.ru en blo

Добрэ! Этот метод мне по душе. Когда будет на поддержке более 1пары десятков сайтов, тогда задумаюсь об алиасахи бекапе на локалхост...))

Аватар пользователя marazmus marazmus 24 ноября 2011 в 21:08

chel, ты настоящий чел, респект и уважуха риальне Smile drush использует, по интуитивным ощущениям, от силы 0,01% друпалеров, приятно видеть такие материалы (и комментарии) на д.ру, жив еще, курилка Biggrin

Аватар пользователя petrovnn petrovnn 24 ноября 2011 в 22:49

Вооот, если-бы chel не знал линукс, не увидели мы такого полезного поста!

Виной всему линукс!
И вообще драш придумали линуксоиды (наверное)

Аватар пользователя chel chel 10 ноября 2015 в 11:47

marazmus wrote:
chel, ты настоящий чел, респект и уважуха риальне Smile drush использует, по интуитивным ощущениям, от силы 0,01% друпалеров, приятно видеть такие материалы (и комментарии) на д.ру, жив еще, курилка :D

Спасибо, что был полезен. Аж почувствовал себя Челом

petrovnn wrote:
Вооот, если-бы chel не знал линукс, не увидели мы такого полезного поста!

Виной всему линукс!
И вообще драш придумали линуксоиды (наверное)

Уважаемый гуру, спасибо конечно за комплименты, я линукс уж точно не знаю (я его мышкой пользую), могу даже щелчком по иконке в ubuntu запустить с первого раза: ff или например chrome, opera, даже windows в презервативе виртуалке, я крут, я уже даже знаю "пару" команд: ls, cd, mc, которыми почти не пользуюсь - спасибо drush!

А drush (если посмотрите в его исходники) - он ведь на php написан, а вы сеньор Николай - php больше и лучше меня знаете, для вас друпал - это php-framework.
А инструмент drush экономит огромную, я бы сказал неимоверно огромную кучу времени у разработчика на скучные рутинные (типа копи-паст) повседневные задачи.

Ну пример из жизни: сколько у вас, сеньор, времени уйдет чтобы :
1. проверить на наличие обновленных модулей, составить их список, скачать и обновить к примеру 20модулей, ядро друпала, и так чтобы забэкапить старые модули и заменить новыми плюс забэкапить файлы ядра?
И сколько уйдет времени чтобы:
2. набрать drush up[ENTER] ?

(по второму пунтку - где тут знания линукс?)

вот кто знает линукс

Аватар пользователя DennisVV DennisVV 25 ноября 2011 в 11:22

"marazmus" wrote:
после такого позора ты просто обязан на ней жениться

ипический конь!!! опять с женой объясняться :(((

Аватар пользователя Crea Crea 25 ноября 2011 в 11:25

marazmus wrote:
Это ж Анжела Байрон, http://drupal.org/user/24967, чувак, стыдно друпалеру не знать таких людей. Теперь после такого позора ты просто обязан на ней жениться :D

Не получится. Она ж лесбиянка. И в браке, если не ошибаюсь.

Аватар пользователя marazmus marazmus 25 ноября 2011 в 14:48

"Crea" wrote:
Не получится. Она ж лесбиянка. И в браке, если не ошибаюсь.

Crea, для русских людей нет непреодолимых препятствий Biggrin

Аватар пользователя raigan1970 raigan1970 26 ноября 2011 в 12:44

Действительно интересный материальчик. А Вы серьезно писать не подумывали? Думаю, у Вас бы получилось. По крайней мере, можно было бы очень посещаемый блог получить. Сейчас в интернете с уникальными интересными текстами проблема.

Аватар пользователя petrovnn petrovnn 14 декабря 2011 в 17:45

Такой вопрос.
Есть у меня боевой сайт на хостинге и девелоперский на моем компе. На боевом сайте люди:

* оставляют комментарии
* голосуют (таблица votingapi)
* и добавляют прочую инфу (самописные модули, свои таблицы)

Допустим я делаю свою версию на локальной машине с какими-то новыми функциями.

Можно-ли с помощью драша синхронизировать сайт ТАК, чтобы всю ту инфу, которую добавили юзеры, пока я делал дев-версию, можно было помёрджить с новой версией сайта, которая допустим пока локально. И так, чтобы на локальной вся новая инфа тоже появилась?

Если честно, я слабо верю что драш на такое способен, но на всякий случай решил спросить. Кажется это называется deploy?

Аватар пользователя v1adimir@drupal.org v1adimir@drupal.org 15 декабря 2011 в 6:54

petrovnn wrote:
...Если честно, я слабо верю что драш на такое способен, но на всякий случай решил спросить. Кажется это называется deploy?

Если требутеся переносить только фичи – views, новые content type, то да – модуль features, а если требуется переносить контент, то для этого служит deploy. Мы его пользовали на 6-ке.

Этот модуль неправильно назвали, его настоящее имя – hemmaroy Wink

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

Аватар пользователя chel chel 15 декабря 2011 в 12:41

Я думаю вам нужно изучить features, который поддерживается в drush. На прошлом DrupalConf кстати была лекция по поводу командной разработки и синхронизации кода среди разработчиков

Аватар пользователя forestdc forestdc 16 ноября 2012 в 3:09

samosyn wrote:
Таки на винде сие счастье работать будет али нет? Никто не попробовал?
И еще если Drupal 6 а не 7 ???

Да,через программу putty

Аватар пользователя samosyn samosyn 29 сентября 2012 в 19:53

"RxB" wrote:
Будет, но на винде сложно.

Сложно, но можно - это главное! А поподробней можно про ухищрения с виндой? Буду признателен крайне, ибо делаю проект, где без этого никак.. Геологи шастают по полям, заносят инфу в локальный сайт на ноуте... Как только ловится вай-фай, в идеале всё само должно законнектиться и обновить контент на сайте, где "вестей с полей" с нетерпением ждут те, кто дома.