Удаление 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 приводили к тому, что в продакшене не работали вещи, которые работали в разработке.

Вернуться на верх