Устранение распространенных ошибок
Этот раздел поможет вам решить наиболее частые проблемы, которые могут возникнуть при установке и запуске проекта "Crisis Monitor".
1. Ошибка Error: No such command '...'
Проблема: При попытке выполнить любую команду
flask, например,flask db upgradeилиflask seed-roles, вы видите в терминале ошибку:Error: No such command 'db'.илиError: No such command 'seed-roles'.Причина: Flask не может найти ваше приложение. Это происходит, когда переменная окружения
FLASK_APPне установлена. Эта переменная должна указывать на файл, где создается экземпляр вашего приложения (в данном проекте этоrun.py).Решение:
- Проверьте файл
.env. Убедитесь, что в корневой папке проекта есть файл.envи в нем содержится строка:env FLASK_APP=run.py - Активируйте виртуальное окружение. Убедитесь, что локальное окружение
.venvактивно. Если нет, активируйте его:bash source .venv/bin/activate - Убедитесь, что
python-dotenvустановлен. Эта библиотека автоматически загружает переменные из.envфайла. Она должна быть вrequirements.txt.
- Проверьте файл
2. Не удается войти под пользователем admin
Проблема: Приложение успешно запустилось, но при попытке входа с логином
adminи паролемadminвы получаете ошибку "Invalid username or password".Причина: Скорее всего, вы создали структуру базы данных (
flask db upgrade), но не наполнили её начальными данными. В результате таблицаuserпуста, и в ней нет пользователяadmin.Решение: Выполните команды для наполнения базы данных (сидинга). Порядок выполнения критически важен.
```bash
1. Сначала создайте роли (обязательно!)
flask seed-roles
2. Теперь создайте пользователя-администратора
flask seed-admin
`` После выполнения этих команд пользовательadmin` будет создан, и вы сможете войти в систему.
3. Команда flask db upgrade завершается с ошибкой
Проблема: При выполнении
flask db upgradeпроцесс прерывается с ошибкой, которая может выглядеть какUndefinedColumn,KeyError,multiple headsили другая ошибка, связанная с базой данных.Причина №1: Несоответствие моделей и миграций Иногда разработчик добавляет новое поле в модель SQLAlchemy (в директории
app/models/), но забывает создать для этого изменения файл миграции. В результате код приложения ожидает наличия столбца в БД, которого там нет.Решение для Причины №1:
- Создайте новую миграцию, которая зафиксирует изменения в моделях:
bash flask db migrate -m "Add new field or feature" - После успешного создания файла миграции снова примените все миграции:
bash flask db upgrade
- Создайте новую миграцию, которая зафиксирует изменения в моделях:
Причина №2: Поврежденная история миграций (Multiple Heads) Это более сложная проблема, обнаруженная в ходе аудита этого проекта. Она возникает, когда несколько миграций были созданы из одной и той же родительской миграции, образуя "ветки" в истории. Alembic (инструмент миграций) не знает, какую ветку выбрать, и останавливается.
Решение для Причины №2:
Найдите "головы" (конфликтующие ветки), выполнив команду:
bash flask db headsВы увидите несколько ревизий (ID), напримерxxxx...иyyyy....Объедините "головы" в одну миграцию слияния. Замените
<head1>и<head2>на ID из предыдущего шага.bash flask db merge <head1> <head2> -m "Merge conflicting migration branches"Если "голов" больше двух, укажите их все.Примените миграции снова. После того как история станет линейной, команда
upgradeдолжна выполниться успешно:bash flask db upgrade