Django на Heroku, Как перенести данные sqlite3 в postgres

Я пытался разместить сайт на heroku, но я продолжаю получать эту ошибку File "/app/.heroku/python/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation "home_product" does not exist LINE 1: ...home_product"."price", "home_product"."slug" FROM "home_prod... всякий раз, когда я пытаюсь использовать heroku run python manage.py migrate -a appname

Я использовал это видео в основном как ссылку на хостинг: https://www.youtube.com/watch?v=UkokhawLKDU&t=964s

а также эти статьи, которые не очень помогли: Heroku Django Database Error https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Deployment

Вот мой settings.py

Мой models.py:

from django.db import models


class Product(models.Model):
    name = models.CharField(max_length=100)
    image = models.ImageField(blank=True)
    desc = models.TextField()
    price = models.IntegerField()
    slug = models.SlugField(unique=True, default=None)

    def __str__(self):
        return self.name

class Images(models.Model):
    product = models.ForeignKey(Product, default=None, on_delete=models.CASCADE)
    img = models.ImageField(upload_to='images/')

    def __str__(self):
        return self.product.name

    
class Beads(models.Model):
    name = models.CharField(max_length=200)
    price = models.IntegerField()
    img = models.ImageField(upload_to='beads/')

Мой Procfile:

web: gunicorn Corbett_Jewelry.wsgi

Мои требования.txt:

cycler==0.10.0
dj-database-url==0.5.0
Django==3.2.9
django-heroku==0.3.1
gunicorn==20.1.0
kiwisolver==1.3.2
matplotlib==3.4.3
numpy==1.21.2
Pillow==8.3.2
psycopg2==2.9.2
pyparsing==2.4.7
python-dateutil==2.8.2
python-decouple==3.5
pytz==2021.3
selenium==3.141.0
six==1.16.0
sqlparse==0.4.2
urllib3==1.26.7
whitenoise==5.3.0

Я не знаю, какая еще информация вам может понадобиться для решения этой проблемы, я буду рад предоставить любую информацию, так как я бьюсь над этим уже неделю.

@Gamingapple... как вы спросили в комментариях, я постараюсь предоставить все возможные решения вашей проблемы.

Я никогда не использовал Heroku, но вот первые решения, которые я бы попробовал:

1. Быстрое чтение справочной документации Heroku показывает, что вы, возможно, не выполняете миграции так, как Heroku считает лучшей практикой для миграций: https://help.heroku.com/GDQ74SU2/django-migrations там (более или менее) означает, что вы должны выполнять миграции локально, выкладывать их на Git, а затем Heroku автоматизирует выполнение миграций при развертывании, где говорится:

Then, add the following as the first line in your Procfile:

release: python manage.py migrate

Но обратите внимание, что это также означает, что вы должны использовать Postgres локально в разработке, а не SQLite (как предполагает ваш заголовок).

-- Наряду с этим, похоже, что вы пытаетесь запустить миграции по приложениям, когда вы это делаете: manage.py migrate -a appname, у Django есть несколько регулярных миграций, которые должны быть запущены, поэтому я бы просто попробовал manage.py migrate

2. Вы отметили в комментарии, что dj_database_url.config() из пакета PyPi dj_database_url: https://pypi.org/project/dj-database-url/ возвращает пустой словарь. Для меня, без дополнительной информации, я бы сказал, что именно в этом и заключается ваша проблема, когда вы вручную пытаетесь запустить migrate в вашем экземпляре Heroku; нет базы данных для поиска или подключения. Чтобы исправить это, я бы убрал использование dj_database_url (так как я тоже не использовал его, а мы отлаживаем), и вручную написал бы строку подключения для DATABASES Django, например, так:

pip install psycopg2 или просто убедитесь, что он находится в requirements/installed.

Измените ваш DATABASES attr в настройках, чтобы он был написан вручную, чтобы вы знали, что это такое (мы отлаживаем, поэтому, возможно, после того, как вы его установите, вы сделаете сбор пароля более безопасным, например, как переменную env)

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.postgresql',
       'NAME': '[HEROKU DB NAME]',
       'USER': '[HEROKU DB USERNAME]',
       'PASSWORD': '[HEROKU PASSWORD]',
       'HOST': '{HEROKU HOST IP OR NAME FOR YOUR DB]',
       'PORT': '[HEROKU DB PORT]',
   }
}

Теперь, когда все исправлено, выполните команды миграции:

python manage.py makemigrations

python manage.py migrate

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