Развертывание приложения Django в Heroku

Я новичок в Python/кодировании/веб-разработке и сталкиваюсь с ошибками в процессе развертывания.

Я написал приложение для поиска партнеров, используя Python/Django. Я пытаюсь развернуть это приложение с помощью Heroku. Я следовал всем указаниям по настройке сервера, инициализации репозитория Git, созданию профиля, Gunicorn и т. д. и т. д. и т. д.

Я смог git push heroku master.

Однако, когда я действительно пытаюсь синхронизировать свои файлы с базой данных, он возвращает ошибку. Я набрал это: heroku run python manage.py make migrations.

Я получаю следующую ошибку:

Running python manage.py migrate on ⬢ blooming-island-78995... up, run.1306
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 327, in execute
    django.setup()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "/app/.heroku/python/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/app/directmessages/models.py", line 9, in <module>
    user_obj = User.objects.get(username='ayaspencer') 
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py", line 381, in get
    num = len(clone)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py", line 240, in __len__
    self._fetch_all()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py", line 1074, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/query.py", line 52, in __iter__
    results = compiler.execute_sql()
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 848, in execute_sql
    cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/app/.heroku/python/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "auth_user" does not exist
LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user...
                                                         ^

Что значит auth_user не существует? Означает ли это, что мне нужно создать суперпользователя? Я пытался, и это не позволит мне. Когда я делаю heroku run python manage.py createsuperuser, это дает мне точно такую ​​​​же ошибку.

Вот мой файл models.py для публикации

from django.db import models
from django.contrib.auth.signals import user_logged_in
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse

def upload_location(instance, filename):
    #extension = filename.split(".")[1]
    location = str(instance.user.username)
    return "%s/%s" %(location, filename)


class PostingMessageManager(models.Manager):
    def get_num_unread_messages(self, user):
        return super(PostingMessageManager, self).filter(read=False).count()




class PostMessage(models.Model):
    subject = models.CharField(max_length=150)
    body = models.CharField(max_length=3000)
    service_being_requested = models.CharField(max_length=3000, null=True)
    service_being_offered = models.CharField(max_length=3000, null=True)
    sender = models.ForeignKey(User, related_name='sent_post_messages', null=True, blank=True)
    receiver = models.ForeignKey(User, related_name='received_post_messages', null=True, blank=True)
    sent = models.DateTimeField(auto_now_add=False, auto_now=False, null=True, blank=True)
    read_at = models.DateTimeField(auto_now_add=False, auto_now=False, null=True, blank=True)
    read = models.BooleanField(default=False)
    parent = models.ForeignKey('self', related_name='parent_message', null=True, blank=True)
    replied = models.BooleanField(default=False)
    CERTIFIED = 'Yes'
    NONCERTIFIED = 'No'
    INDIFFERENT = 'Indifferent'

    CERTIFICATION_CHOICES = (
        (CERTIFIED, 'Yes'),
        (INDIFFERENT,'Indifferent'),

    )

    CERTIFICATION_CHOICES_ME = (
        (CERTIFIED, 'Yes'),
        (NONCERTIFIED, 'No'),

    )
    should_they_be_certified = models.CharField(max_length=200,
                                      choices=CERTIFICATION_CHOICES,
                                      default=INDIFFERENT)

    are_you_certified = models.CharField(max_length=200,
                                      choices=CERTIFICATION_CHOICES_ME,
                                      default=NONCERTIFIED) 

    def is_certified(self):
        return self.should_they_be_certified in (self.CERTIFIED)

    def dont_care(self):
        return self.are_you_certified in (self.INDIFFERENT)

    def iam_certified(self):
        return self.are_you_certified in (self.CERTIFIED)


    def __unicode__(self):
        return self.body

    objects = PostingMessageManager()



    def get_absolute_url(self):
        return (reverse('view_post_message', kwargs={'ps_id': self.id}))

    class Meta:
        ordering = ['-sent',]



def set_messages_in_session(sender, user, request, **kwargs):
    post_message = PostMessage.objects.get_num_unread_messages(user)
    request.session['post_num_of_messages'] = post_message

user_logged_in.connect(set_messages_in_session)


#class F(models.Model):
    #certification = models.CharField(max_length=50, choices=CERTCHOICE)
    #class Meta:
        #model = PostMessage
        #fields = ['certification']

Кроме того, не уверен, что это поможет, но я выполнил поиск clean_username и основываясь на своих показаниях из этого Пользовательская модель Django в админке, отношение auth_user не существует

python2.7/site-packages/django/contrib/auth/backends.py:

  123              return
  124          user = None
  125:         username = self.clean_username(remote_user)
  126  
  127          UserModel = get_user_model()
  ...
  143          return user
  144  
  145:     def clean_username(self, username):
  146          """
  147          Performs any cleaning on the "username" prior to using it to get or

python2.7/site-packages/django/contrib/auth/middleware.py:

   78          # persisted in the session and we don't need to continue.
   79          if request.user.is_authenticated():
   80:             if request.user.get_username() == self.clean_username(username, request):
   81                  return
   82              else:
   ..
   94              auth.login(request, user)
   95  
   96:     def clean_username(self, username, request):
   97          """
   98          Allows the backend to clean the username, if the backend defines a
   99:         clean_username method.
  100          """
  101          backend_str = request.session[auth.BACKEND_SESSION_KEY]
  102          backend = auth.load_backend(backend_str)
  103          try:
  104:             username = backend.clean_username(username)
  105:         except AttributeError:  # Backend has no clean_username method.
  106              pass
  107          return username

7 matches across 2 files

person pynewbee    schedule 14.07.2016    source источник
comment
я тоже пробовал это. у меня точно такая же ошибка :( :(   -  person pynewbee    schedule 14.07.2016
comment
Пожалуйста, добавьте postings/models.py к своему вопросу!   -  person Klaus D.    schedule 14.07.2016
comment
мой вопрос был обновлен с помощью models.py из сообщений   -  person pynewbee    schedule 14.07.2016
comment
Запрос ORM на уровне модуля или класса невозможен. Вы должны удалить строку 12 (user_obj =...) или переместить ее в метод.   -  person Klaus D.    schedule 14.07.2016
comment
а, понятно. Я попробую, спасибо!   -  person pynewbee    schedule 14.07.2016
comment
я избавился от части user_obj и продолжил git add ., git commit, git push heroku master и снова попытался запустить heroku run python manage.py make migrations. У меня все равно выдавала ту же ошибку :( :(   -  person pynewbee    schedule 14.07.2016
comment
По крайней мере, Traceback должен был измениться, так как там была эта строка.   -  person Klaus D.    schedule 14.07.2016
comment
Та же проблема в другом файле.   -  person Klaus D.    schedule 14.07.2016
comment
Большое спасибо, что указали мне на трассировку!! я понял, что user_obj не был удален в directmessage/models.py. я просто удалил его и там, и миграция, кажется, работает. БОЛЬШОЕ СПАСИБО!   -  person pynewbee    schedule 14.07.2016


Ответы (3)


Кажется, вы не мигрировали, можете попробовать:

heroku run python manage.py migrate

И вам не нужно heroku run python manage.py makemigrations, так как скрипты миграции уже есть

person Arun Ghosh    schedule 14.07.2016
comment
Я подумал, что это может быть полезно, но в моем form.py у меня нет определения с именем clean_username. stackoverflow.com/questions/16953302/ - person pynewbee; 14.07.2016

попробуй запустить эти две команды

heroku run python manage.py migrate auth
heroku run python manage.py migrate
person vikas0713    schedule 14.07.2016

Я застрял в той же самой проблеме более 4 дней. У меня все было исправлено, когда я использовал Postgres вместо Sqlite, который вы предположительно используете, потому что это опция по умолчанию, которая поставляется с django, поэтому я рекомендую следовать этому руководству, чтобы использовать Postgres: Django Girls: установка PostgreSQL

Удачи!

person Mostafa Elgayar    schedule 04.12.2016