サーバーより新しいマイグレーションがローカルに存在する場合、 リストア後にmigrateを実行しないと500エラーになるバグを修正。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
49 lines
2.0 KiB
Bash
Executable File
49 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
||
# サーバーのDBをローカルに同期するスクリプト
|
||
#
|
||
# 事前準備(サーバー側でkeinasystemユーザーとして実行):
|
||
# docker exec keinasystem_db pg_dump -U keinasystem keinasystem > /tmp/keinasystem_dump.sql
|
||
#
|
||
# 使用: bash sync_db.sh
|
||
set -e
|
||
|
||
REMOTE_HOST="keinafarm"
|
||
LOCAL_DUMP="/tmp/keinasystem_dump.sql"
|
||
|
||
echo "=== DBSync: サーバー → ローカル ==="
|
||
|
||
# 1. サーバーからdumpファイルをscpで取得
|
||
echo "[1/4] サーバーからダンプファイルを取得..."
|
||
scp "$REMOTE_HOST:/tmp/keinasystem_dump.sql" "$LOCAL_DUMP"
|
||
echo " → ダンプ取得完了: $LOCAL_DUMP ($(du -sh $LOCAL_DUMP | cut -f1))"
|
||
|
||
# 2. ローカルのDBコンテナが起動しているか確認
|
||
echo "[2/4] ローカルDBコンテナを確認..."
|
||
if ! docker compose -f docker-compose.local.yml ps db 2>/dev/null | grep -q "running"; then
|
||
echo " → ローカルDBコンテナが起動していません。起動します..."
|
||
docker compose -f docker-compose.local.yml up -d db
|
||
echo " → DB起動待機中..."
|
||
sleep 10
|
||
fi
|
||
|
||
# 3. 既存データをドロップして復元
|
||
echo "[3/4] ローカルDBにリストア(既存データをリセット)..."
|
||
# DBを一旦削除して再作成してからリストア
|
||
docker compose -f docker-compose.local.yml exec -T db \
|
||
psql -U keinasystem -d postgres -c "DROP DATABASE IF EXISTS keinasystem;" --quiet
|
||
docker compose -f docker-compose.local.yml exec -T db \
|
||
psql -U keinasystem -d postgres -c "CREATE DATABASE keinasystem OWNER keinasystem;" --quiet
|
||
cat "$LOCAL_DUMP" | docker compose -f docker-compose.local.yml exec -T db \
|
||
psql -U keinasystem -d keinasystem --quiet
|
||
echo " → リストア完了"
|
||
|
||
# クリーンアップ
|
||
rm -f "$LOCAL_DUMP"
|
||
|
||
# 4. マイグレーション(サーバーより新しいマイグレーションを適用)
|
||
echo "[4/4] マイグレーション実行..."
|
||
docker compose -f docker-compose.local.yml exec backend python manage.py migrate
|
||
|
||
echo ""
|
||
echo "=== 同期完了 ==="
|