migrations fix

This commit is contained in:
2025-09-18 16:52:03 +09:00
parent fdd0580554
commit e907dffe8c
5 changed files with 294 additions and 2 deletions

View File

@@ -42,14 +42,34 @@ else
echo "⚠️ Утилита pg_isready не найдена, пропускаем проверку"
fi
# Копирование миграций JS в отдельную директорию
echo "📂 Копирование только JS-миграций во временную директорию..."
mkdir -p temp_migrations
find migrations -name "*.js" -exec cp {} temp_migrations/ \;
# Применение миграций
echo "🔄 Применение миграций с помощью node-pg-migrate..."
DATABASE_URL="postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" npx node-pg-migrate up
DATABASE_URL="postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME" npx node-pg-migrate up --migrations-dir=temp_migrations
# Проверка результата
if [ $? -eq 0 ]; then
echo "✅ Миграции успешно применены!"
else
echo "❌ Ошибка при применении миграций!"
exit 1
echo "⚠️ Пытаемся применить миграции из других источников..."
# Попробуем применить SQL-миграции напрямую
if [ -d "src/database/migrations" ]; then
echo "📂 Найдены SQL-миграции. Пытаемся применить их напрямую..."
for sql_file in src/database/migrations/*.sql; do
if [ -f "$sql_file" ]; then
echo "🔄 Применение миграции $sql_file..."
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -f "$sql_file" || echo "⚠️ Ошибка при применении $sql_file"
fi
done
fi
fi
# Очистка временных файлов
echo "🧹 Очистка временных файлов..."
rm -rf temp_migrations

View File

@@ -0,0 +1,46 @@
#!/bin/bash
# compile_ts_migrations.sh - Скрипт для компиляции TS миграций в JS
echo "🔄 Компиляция TypeScript миграций в JavaScript..."
# Проверка наличия TypeScript файлов
if [ ! -f "migrations/*.ts" ] && [ ! -d "node_modules/typescript" ]; then
echo "📦 Установка TypeScript..."
npm install --no-save typescript
fi
# Создание временного tsconfig для миграций
echo "📝 Создание временного tsconfig.json для миграций..."
cat > migrations/tsconfig.json << EOL
{
"compilerOptions": {
"target": "es2020",
"module": "commonjs",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"outDir": "../temp_migrations"
},
"include": ["./*.ts"]
}
EOL
# Компиляция TS файлов
echo "🔄 Компиляция TypeScript миграций..."
npx tsc -p migrations/tsconfig.json
# Подтверждение
if [ $? -eq 0 ]; then
echo "✅ Миграции успешно скомпилированы в директорию temp_migrations/"
# Проверка, были ли созданы файлы
file_count=$(find temp_migrations -name "*.js" | wc -l)
echo "📊 Скомпилировано файлов: $file_count"
else
echo "❌ Ошибка при компиляции миграций!"
exit 1
fi
# Очистка временных файлов
rm migrations/tsconfig.json

37
bin/run_full_migration.sh Normal file
View File

@@ -0,0 +1,37 @@
#!/bin/bash
# run_full_migration.sh - Полный процесс миграции с компиляцией TypeScript
echo "🚀 Запуск полного процесса миграции..."
# Проверка наличия файлов TS
if find migrations -name "*.ts" -quit; then
echo "📋 Обнаружены TypeScript миграции. Компилируем их..."
# Компиляция TS файлов
./bin/compile_ts_migrations.sh
# Проверка результата
if [ $? -ne 0 ]; then
echo "❌ Ошибка компиляции TS миграций!"
exit 1
fi
else
echo " TypeScript миграции не обнаружены, пропускаем компиляцию."
mkdir -p temp_migrations
fi
# Копирование JS миграций
echo "📂 Копирование JS-миграций..."
find migrations -name "*.js" -exec cp {} temp_migrations/ \;
# Запуск миграций
echo "🔄 Применение всех миграций..."
./bin/apply_migrations.sh
# Проверка результата
if [ $? -eq 0 ]; then
echo "✅ Процесс миграции успешно завершен!"
else
echo "❌ Ошибка в процессе миграции."
exit 1
fi

101
bin/run_sql_migrations.sh Normal file
View File

@@ -0,0 +1,101 @@
#!/bin/bash
# run_sql_migrations.sh - Ручное применение SQL-миграций
echo "🚀 Запуск SQL-миграций..."
# Загрузка переменных окружения из .env
if [ -f .env ]; then
echo "📝 Загрузка переменных окружения из .env..."
set -o allexport
source .env
set +o allexport
else
echo "⚠️ Файл .env не найден, используем значения по умолчанию"
export DB_HOST="localhost"
export DB_PORT="5432"
export DB_NAME="telegram_tinder_bot"
export DB_USERNAME="postgres"
export DB_PASSWORD="postgres"
fi
# Вывод информации о подключении
echo "🔍 Используемые параметры подключения:"
echo "DB_HOST: $DB_HOST"
echo "DB_PORT: $DB_PORT"
echo "DB_NAME: $DB_NAME"
echo "DB_USERNAME: $DB_USERNAME"
echo "DB_PASSWORD: ********"
# Функция для применения SQL файлов из директории
apply_sql_files() {
local directory=$1
echo "🔍 Ищем SQL-файлы в директории $directory..."
if [ -d "$directory" ]; then
# Получаем список файлов в порядке времени создания
files=$(find "$directory" -name "*.sql" | sort)
if [ -z "$files" ]; then
echo "⚠️ SQL-файлы не найдены в $directory"
return 0
fi
for sql_file in $files; do
echo "🔄 Применение миграции $sql_file..."
# Проверяем, есть ли уже запись о миграции в таблице migrations
filename=$(basename "$sql_file")
exists=$(PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -t -c "SELECT EXISTS(SELECT 1 FROM migrations WHERE name='$filename')" 2>/dev/null)
# Если таблицы migrations не существует, создаем её
if [ $? -ne 0 ]; then
echo "📝 Таблица migrations не найдена. Создаем..."
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -c "
CREATE TABLE IF NOT EXISTS migrations (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
" 2>/dev/null
exists=" f"
fi
# Если миграция уже применена, пропускаем
if [[ "$exists" == *"t"* ]]; then
echo "⏭️ Миграция $filename уже применена, пропускаем"
continue
fi
# Применяем миграцию
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -f "$sql_file"
if [ $? -eq 0 ]; then
echo "✅ Миграция $filename успешно применена"
# Записываем в таблицу migrations
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USERNAME -d $DB_NAME -c "
INSERT INTO migrations (name) VALUES ('$filename')
" 2>/dev/null
else
echo "❌ Ошибка при применении миграции $filename"
return 1
fi
done
else
echo "⚠️ Директория $directory не найдена"
return 0
fi
return 0
}
# Применяем SQL миграции из всех возможных папок
echo "🔄 Применение SQL-миграций из src/database/migrations..."
apply_sql_files "src/database/migrations"
echo "🔄 Применение SQL-миграций из migrations/sql..."
apply_sql_files "migrations/sql"
echo "🔄 Применение SQL-миграций из migrations (если есть)..."
apply_sql_files "migrations"
echo "✅ Процесс применения SQL-миграций завершен!"