Не удалось создать суперпользователя django в aws beanstalk ни с помощью команды контейнера, ни с помощью manage.py

Я застрял в узком месте, которое я пытался решить, используя официальные документы и другие ответы здесь, в stackoverflow, но до сих пор не смог программно создать суперпользователя django в среде beanstalk.

Текущее состояние - а. Приложение развертывается плавно, и я могу получить доступ к базе данных из своего приложения пользовательского интерфейса. в основном запись делается в какой-то другой таблице, которая у меня есть в приложении.

Как я пытался создать суперпользователя -

а. Передавая команды контейнера -

Опция 1-

container_commands:
  01_migrate:
    command: "django-admin.py migrate"
    leader_only: true
  02_collectstatic:
    command: "django-admin.py collectstatic --noinput"

commands:
  super_user:
    command: "source /opt/python/run/venv/bin/activate && python <appname>/createuser.py"
    leader_only: true

  option_settings:
  "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "<Appname>.settings"
    PYTHONPATH: "/opt/python/current/app:$PYTHONPATH"

В журналах - я не видел, чтобы он пытался запустить пользовательскую команду.

Вариант 2 -

container_commands:
  01_migrate:
    command: "django-admin.py migrate"
    leader_only: true
  02_collectstatic:
    command: "django-admin.py collectstatic --noinput"
  03_createsuperuser:
    command: "source /opt/python/run/venv/bin/activate && django-admin.py createsuperuser"

  option_settings:
  "aws:elasticbeanstalk:application:environment":
    DJANGO_SETTINGS_MODULE: "<appname>.settings"
    PYTHONPATH: "/opt/python/current/app:$PYTHONPATH"

Для этого я создал файл createsuperuser.py в папке /management/commands/, следуя структуре init.py в обеих папках, и один файл createsuperuser.py в командах —

from django.core.management.base import BaseCommand
from django.contrib.auth.models import User


class Command(BaseCommand):

   def handle(self, *args, **options):
      if not User.objects.filter(username="admin").exists():
          User.objects.create_superuser("admin", "[email protected]", "admin")

На это я получил следующее сообщение из логов -

Superuser creation skipped due to not running in a TTY. You can run `manage.py createsuperuser` in your project to create one manually.    

Мои запросы -

  1. почему я не могу создать суперпользователя из командной строки моей виртуальной среды? В том, что я получаю такое сообщение -

    поднять ImproperlyConfigured("settings.DATABASES настроен неправильно." django.core.exceptions.ImproperlyConfigured: settings.DATABASES настроен неправильно. Укажите значение ENGINE. См. документацию по настройкам для получения более подробной информации.

Немного странно, учитывая, что команда makemigrations работает нормально.

И когда я повторяю $DJANGO_SETTINGS_MODULE, я получаю правильную настройку

appname.settings

Дайте мне знать, где я ошибаюсь при создании суперпользователя?


person nishith83    schedule 10.07.2016    source источник


Ответы (3)


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

  1. В папке приложения django создайте «управление» пакетом python.
  2. создать другой пакет внутри "команд" пакета управления
  3. создайте файл python в пакете команд mysuperuser.py

    import os
    from django.core.management.base import BaseCommand
    from django.contrib.auth.models import User
    
    class Command(BaseCommand):
        def handle(self, *args, **options):
            if not User.objects.filter(username='myuser').exists():
                User.objects.create_superuser('myuser',
                                              '[email protected]',
                                              'mypassword')
    
  4. В файле django-migrate.config добавьте вторую команду

    02_create_superuser_for_django_admin: command: "python manage.py mysuperuser" leader_only: true

  5. сделать python manage.py collectstatic и eb развернуть.

Это создало для меня суперпользователя. Мне не нужно было добавлять какой-либо PYTHONPATH, как описано в некоторых ответах, доступных в Интернете.

person Deepesh Pandey    schedule 25.07.2019

Ваш пользовательский файл называется createsuperuser.py, это то же самое, что и команда Django, и это столкновение является причиной проблемы. Используйте «createsu.py» в качестве имени файла, затем обязательно измените файл конфигурации, чтобы также использовать «createsu».

person thrillhouse    schedule 10.11.2018
comment
Я нашел ответ и отредактировал свой оригинальный комментарий. Мне кажется немного странным, что я могу отвечать без представителя, но не могу комментировать! У меня так редко есть ответы на вопросы здесь, но здесь я просто хотел отправить сообщение автору вопроса и посмотреть, нашел ли он когда-нибудь ответ. Я предполагаю, что это просто причуда stackoverflow, которую мне еще предстоит выяснить. - person thrillhouse; 10.11.2018

Вы не можете использовать create superuser в ситуации, когда пользователь не может ввести информацию. См. https://realpython.com/blog/python/deploying-a-django-app-to-aws-elastic-beanstalk/#Create.the.Admin.User для другого подхода.

person user7218711    schedule 28.11.2016