Удаление db.sqlite через терминал (Django)
В настоящее время я развертываю проект на Heroku, однако он выдает следующую ошибку: ValueError: Связанная модель 'store.user' не может быть разрешена.
Но есть способ избежать такой ошибки локально. Вы просто делаете:
py manage.py migrate store
И тогда
py manage.py migrate
Другими словами, если я мигрирую по отдельности, я не столкнусь с этой ошибкой. Однако, если Heroku мигрирует все вместе, то развертывание не удается из-за этой ошибки.
Если я действую локально, как это делает Heroku, т.е. запускаю
py manage.py migrate
Я могу легко нажать и удалить файл db.sqlite3, сделать миграции и мигрировать отдельно. Тогда проблема будет решена. Однако это невозможно при развертывании на Heroku. Итак, как я могу удалить этот файл только через терминал? Я искал, но люди только говорят, что вы нажимаете на файл и удаляете его, что для меня невозможно.
Спасибо
Однако, Heroku мигрирует все вместе, затем развертывание не удается из-за этой ошибки
.
Героку не делает ничего подобного.
Миграции запускаются на Heroku только тогда, когда вы прикажете им это сделать, либо выполнив что-то вроде
heroku run python manage.py migrate
или потому что вы объявили процесс выпуска, который должен запускаться при развертывании новой версии, например:
web: gunicorn app.wsgi
release: python manage.py migrate
В обоих случаях вы отвечаете за то, какой будет эта команда. Если вы не хотите запускать python manage.py migrate при каждом развертывании, удалите процесс release из вашего Procfile.
если я мигрирую отдельно, я не столкнусь с такой ошибкой
Это касается.
Причин этому может быть несколько. Одной из распространенных проблем является отсутствие зависимостей в вашей миграции. Если вы пишете миграцию в app1, которая зависит от определенных моделей и таблиц из app2, вам нужно добавить зависимость к соответствующей миграции в app1, например, что-то вроде этого примера из документации:
class Migration(migrations.Migration):
dependencies = [
('app1', '0001_initial'),
# added dependency to enable using models from app2 in move_m1
('app2', '0004_foobar'),
]
operations = [
migrations.RunPython(move_m1),
]
Если миграции написаны правильно, так, что они точно отражают код в каждом коммите, опираются друг на друга, имеют объявленные зависимости и т.д., вы всегда сможете безопасно применить их к вашей базе данных.
Наконец, вы спрашиваете об удалении db.sqlite.
Файловая система Heroku является эфемерной. Она заносится в slug вашего приложения во время сборки, и все изменения, которые вы вносите в нее, сбрасываются при каждом перезапуске дино. Это происходит часто (по крайней мере, раз в день).
Это означает, что вы не можете эффективно удалить файл базы данных. Но это также означает, что вы не можете сохранять данные и ожидать, что они будут там, когда вы найдете их позже! SQLite не подходит для Heroku.
<<<Клиент-серверная база данных, например PostgreSQL, - гораздо лучший выбор. Heroku предлагаетсобственный сервис Postgres с бесплатным уровнем.
Если вы переходите, я настоятельно рекомендую вам переходить и в разработке. ORM в Django позволяет относительно легко меняться, но движки баз данных не заменяют друг друга. Я видел реальные примеры, когда разработка на SQLite и развертывание на Postgres или MySQL приводили к тому, что в продакшене не работали вещи, которые работали в разработке.