@laravue
laravel

Как лучше в Laravel организовать синхроназицию некоторых таблиц двух проектов (продакшн и тестовый)?

Интересуют именно подходы Laravel.

Задача: Есть две базы. В рабочую базу оператор вводит данные через веб-интерфейс. Нужно чтобы при сохранении (добавлении, изменении, удалении ... ) каждой записи автоматически эта инфа попадала в соседнюю базу данных, расположенную на этом же сервере - в тестовую версию. Чтоб в тестовой поддерживалась актуальная информация.

Как лучше это реализовать?

Мой вариант следующий:
1)Создать команду artisan которая делает бекап таблицы и вотом разворачивает эту таблицу в другой базе.
2)создать Job которая бы выполняла эту команду
3)запускать эту job каждый раз когда происходит одно из действий (сохранить, удалить, изменить ...)

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

А как еще можно?
  • Вопрос задан
  • 319 просмотров
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
Это вопрос не из области действия laravel. Более того, как вы будете действовать, когда структура БД на продакшене и в тесте отличается? Вероятно лучше всего делать бэкап-рестор рабочей в тестовую в процессе CI/СD рядом с git pull в тестовом окружении и до выполнения миграций.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@2vtlk
У меня для этого тупо написан bash скрипт примерно следующего содержания (использую laradock), который делает бекап на проде, дропает локальную базу и восстанавливает на локальной машине дамп, скопированный с прода.

Это костыль, но работает как часы. Нормальный devops явно сделал бы по другому.
ssh root@example.com 'cd /var/www/<project>/laradock; docker-compose run postgres pg_dump -Fc --dbname=postgresql://<user>:<password>@postgres:5432/<database> > /var/www/dump.sql'
scp root@example.com:/var/www/dump.sql .
docker cp dump.sql <container_name>:/tmp/
docker-compose exec postgres dropdb default -U default
docker-compose exec postgres psql -U <username> -W -qAt -c 'CREATE DATABASE "default"'
docker-compose exec postgres psql -U <username> -W -qAt -c 'grant all privileges on database "default" to "default"';
docker-compose exec postgres pg_restore -U default --no-owner --role=default -d default -c /tmp/dump.sql


А если нужно в реалтайме, то скорее всего подойдет репликация
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы