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

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

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

Допустим мы имеем сайт ( придумаем ему синоним 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 Более подробно на английском

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

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

Комментарии

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

7 ноября 2011 в 15:00

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

8 ноября 2011 в 12:41

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

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

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

8 ноября 2011 в 13:07

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

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

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


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

9 ноября 2011 в 0:57

Да не, я только начал вникать в 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

8 ноября 2011 в 23:23

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

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

9 ноября 2011 в 1:37

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

9 ноября 2011 в 13:23

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

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

9 ноября 2011 в 13:39

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

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

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

9 ноября 2011 в 14:05

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

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

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

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

9 ноября 2011 в 21:22

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

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

9 ноября 2011 в 23:29

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

о да! )))

10 ноября 2011 в 1:56

Использует утилиту 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.

13 ноября 2011 в 11:42

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

22 ноября 2011 в 14:43

<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

22 ноября 2011 в 14:51

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

22 ноября 2011 в 15:15

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

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

22 ноября 2011 в 15:30

"Softovick" wrote:

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


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

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

22 ноября 2011 в 16:53

"<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 (обновляем на хостинге)

25 ноября 2011 в 0:41

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

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

23 ноября 2011 в 17:29

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

24 ноября 2011 в 21:08

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

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

24 ноября 2011 в 22:49

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] ?

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

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

10 ноября 2015 в 11:47

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

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

25 ноября 2011 в 11:22

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

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

25 ноября 2011 в 11:25

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

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

25 ноября 2011 в 14:48

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

26 ноября 2011 в 12:44

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

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

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

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

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

14 декабря 2011 в 17:45

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

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

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

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

15 декабря 2011 в 6:54

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

15 декабря 2011 в 12:41

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

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

16 ноября 2012 в 3:09

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

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

29 сентября 2012 в 19:53