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

Тип материала: 
Версия Drupal: 
Ключевые слова: 
Пнд, 19/05/2014 - 14:05

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

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

0 Спасибо

Комментарии

Аватар пользователя Lotar
2 года 11 months назад Lotar #

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

0 Спасибо
Аватар пользователя Artu
2 года 11 months назад Artu #

А чем делаете такой deploy?
Features?

0 Спасибо
Аватар пользователя webrelab
2 года 11 months назад webrelab #

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

0 Спасибо
Аватар пользователя ХулиGUN
2 года 11 months назад ХулиGUN #
webrelab написал:
Организован деплой материалов туда и обратно при добавлении или изменении (по сути синхронизация)

webrelab написал:
по крону раз в пять минут

Совершенно глупый подход. Что будет, если в промежутке между "синхронизацией" я на одном сервере создам одну ноду, а на другом в это время создадут другую?
Почему не использовать общую бд для обоих сайтов? И не нужны все эти костыли с deploy и services

0 Спасибо
Аватар пользователя Artu
2 года 11 months назад Artu #

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

0 Спасибо
Аватар пользователя webrelab
2 года 11 months назад webrelab #

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

0 Спасибо
Аватар пользователя whiesam
2 года 11 months назад whiesam #
webrelab написал:
стоит ли залезть в БД и вручную поправить ID и имена ролей, что бы они на обоих сайтах были одинаковые?

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

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

0 Спасибо
Аватар пользователя webrelab
2 года 11 months назад webrelab #

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

0 Спасибо