Синхронизация двух сайтов, проблема с постоянным обновлением ролей пользователей

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

Аватар пользователя webrelab webrelab 19 мая 2014 в 18:05

Доброго дня и ночи.

Вопрос тем, кто плотно занимался деплоем материалов между сайтами.
У меня есть два сайта - внутренний (типа корпоративного портала) и внешний (публичный). Организован деплой материалов туда и обратно при добавлении или изменении (по сути синхронизация). При деплое вместе с материалом отправляются entity reference объекты, термины таксономии и пользователи, создавшие материал. На втором сайте, в случае если сущность уже есть - она обновляется (UUID прикручено). Так же обновляются роли пользователей. Проблема в том, что Deploy и Services для обновления ролей используют их ID, а на разных сайтах они получились разные и при каждом импорте информация о ролях у зарегистрированных пользователей разваливается (или присваивается несуществующий на этом сайте ID или присваивается неправильная роль).
Как вы решали такую проблему? Лезть в БД и вручную "синхронизировать" ID и названия ролей у обоих сайтов? На drupal.org нашёл похожие обсуждения двух-летней давности, но они похоже заглохли.

Комментарии

Аватар пользователя Lotar Lotar 19 мая 2014 в 19:25

Вопрос интересный. А что вам мешает просто скопировать юзеров с одного на другой с целью синхронизации UID?

Аватар пользователя webrelab webrelab 20 мая 2014 в 1:31

Lotar, UID на сколько я знаю не синхронизируется при копировании с помощью Features и Deploy. Будет присвоен просто следующий по порядку.
Artu, с помощью Features удобно делать перенос настроек сайта из dev на продакшн, а синхронизацию материалов удобно делать модулем Deploy (работает в связке с модулем Services на другой стороне). При добавлении или обновлении материалов правилами я отмечаю этот материал для отправки и отправляю, сама же отправка делается потом по крону раз в пять минут (удобно использовать Elisya Cron). В таком случае, деплой отрабатывает только если на второй стороне в модуле Services включены возможности создания и обновления всех передаваемых сущностей. То-есть, если я запретил делать обновление данных о пользователе, то весь деплой будет завершаться ошибкой - на принимающей стороне нет нужного контроллера (обработчика для данного типа сущности).

Аватар пользователя Artu Artu 20 мая 2014 в 12:12

webrelab, спасибо. Все не дойду до этого.
Но в вашем случае это точно оправдано?
Может лучше мультисайтинг? Хотя это если сначала..

Аватар пользователя webrelab webrelab 20 мая 2014 в 15:47

ХулиGUN, общая БД не подходит. Один сайт внутри организации на внутреннем сервере, другой сайт на облачном сервере в селектеле. Всю эту кашу администрировать сложно и опасны разрывы интернета. Назначение сайтов разное и на них создаются разные типы материалов, редактирование нод происходит только на одном из сайтов, случай с одновременным редактированием исключён, поэтому идея с синхронизацией не очень плоха. В случае отсутствия связи с другим сайтом созданные или отредактированные ноды будут висеть в очереди до возобновления связи. Фактически осталось решить только проблему с ролями. Вопрос знатокам - стоит ли залезть в БД и вручную поправить ID и имена ролей, что бы они на обоих сайтах были одинаковые?
Artu, готов ответить на вопросы по этим модулям, если раньше не занимались и есть в них необходимость.

Аватар пользователя whiesam whiesam 21 мая 2014 в 4:46

"webrelab" wrote:
стоит ли залезть в БД и вручную поправить ID и имена ролей, что бы они на обоих сайтах были одинаковые?

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

Я делал подобный сайт. Внутрянка - CRM, внешка - портал. Тупо запилил на модуле Domain access и бед не знаю) Ещё и фишки придумал исходя из такого подхода. Так что мультисайтинг наше всё.

Аватар пользователя webrelab webrelab 21 мая 2014 в 17:06

Сделал проще. На сайте, где текущий UID был меньше, добавил несколько ролей и переименовал все роли в соответствии с UID на другом сайте. Всё получилось.