Перейти к основному содержимому

Railway Troubleshooting Guide

Руководство по устранению проблем при развертывании на Railway.

🔍 Диагностика проблем с базой данных​

Проблема: "Failed query: SELECT 1 as health"​

Эта ошибка указывает на проблемы с подключением к PostgreSQL базе данных.

Возможные причины:​

  1. Неправильная DATABASE_URL - проверьте переменную окружения
  2. SSL проблемы - Railway требует SSL подключения
  3. Превышение лимитов подключений - слишком много активных соединений
  4. Проблемы с сетью - временные сбои соединения

Решения:​

1. Проверка переменных окружения​
# В Railway CLI
railway variables

# Убедитесь что DATABASE_URL установлена
railway variables set DATABASE_URL="postgresql://..."
2. Проверка SSL настроек​

Убедитесь что в server/db.ts включен SSL для продакшена:

ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: false } : false
3. Тестирование подключения​
# Локально с продакшен переменными
npm run db:test

# На Railway
railway run npm run db:test
4. Проверка логов Railway​
# Просмотр логов
railway logs

# Следить за логами в реальном времени
railway logs --follow

🚀 Настройка Railway проекта​

Переменные окружения​

Обязательные переменные для Railway:

NODE_ENV=production
DATABASE_URL=postgresql://user:password@host:port/database
PORT=3000

Настройка базы данных​

  1. Добавьте PostgreSQL плагин в Railway
  2. Скопируйте DATABASE_URL из плагина
  3. Установите переменную в настройках проекта

Настройка деплоя​

Конфиг сервиса панели — только railway.toml в корне (отдельного railway.json нет), сборка по корневому Dockerfile:

[build]
builder = "DOCKERFILE"

[deploy]
startCommand = "npm start"
restartPolicyType = "ON_FAILURE"
restartPolicyMaxRetries = 10
healthcheckPath = "/api/health"
healthcheckTimeout = 60

🔧 Исправление распространенных ошибок​

Ошибка: "Connection timeout"​

// Увеличьте таймауты в server/db.ts
const poolConfig = {
connectionString: process.env.DATABASE_URL,
connectionTimeoutMillis: 20000, // Увеличено до 20 секунд
acquireTimeoutMillis: 60000, // Увеличено до 60 секунд
ssl: { rejectUnauthorized: false }
};

Ошибка: "Too many connections"​

// Уменьшите максимальное количество подключений
const poolConfig = {
max: 10, // Уменьшено с 20 до 10
min: 1, // Уменьшено с 2 до 1
idleTimeoutMillis: 10000 // Быстрее закрывать idle соединения
};

Ошибка: "SSL required"​

// Принудительно включите SSL
ssl: {
rejectUnauthorized: false,
require: true
}

📊 Мониторинг и отладка​

Проверка состояния приложения​

# Health check endpoint
curl https://your-app.railway.app/api/health

# Database health check
curl https://your-app.railway.app/api/db/health

Просмотр метрик базы данных​

# Подключение к Railway PostgreSQL
railway connect postgres

# Проверка активных подключений
SELECT count(*) FROM pg_stat_activity;

# Проверка медленных запросов
SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;

Логирование​

Добавьте подробное логирование в server/db-utils.ts:

console.log('Database connection attempt:', {
url: process.env.DATABASE_URL?.substring(0, 30) + '...',
ssl: process.env.NODE_ENV === 'production',
poolConfig: {
max: poolConfig.max,
min: poolConfig.min,
timeout: poolConfig.connectionTimeoutMillis
}
});

🛠️ Команды для диагностики​

Railway CLI команды​

# Статус проекта
railway status

# Переменные окружения
railway variables

# Логи приложения
railway logs --follow

# Подключение к базе данных
railway connect postgres

# Запуск команд в Railway окружении
railway run npm run db:test

Локальная диагностика​

# Тест подключения к базе данных
npm run db:test

# Проверка TypeScript
npm run check

# Сборка проекта
npm run build

🔄 Процедура восстановления​

При полном отказе базы данных:​

  1. Проверьте статус PostgreSQL плагина в Railway
  2. Пересоздайте DATABASE_URL если необходимо
  3. Запустите миграции: railway run npm run db:push
  4. Перезапустите приложение: railway redeploy

При проблемах с подключением:​

  1. Проверьте логи: railway logs
  2. Протестируйте подключение: railway run npm run db:test
  3. Проверьте переменные: railway variables
  4. Перезапустите сервис: railway restart

📞 Получение помощи​

Railway Support​

Проект Support​

🔍 Полезные ссылки​