Tidak dapat membuat pengguna super Django di pohon kacang aws baik melalui perintah container atau kelola.py

Saya terjebak pada kemacetan yang telah saya coba selesaikan menggunakan dokumen resmi dan jawaban lain di sini di stackoverflow tetapi masih tidak dapat membuat pengguna super Django secara terprogram di lingkungan pohon kacang.

Keadaan saat ini - a. Aplikasi diterapkan dengan lancar dan saya dapat mengakses database dari aplikasi UI saya. pada dasarnya entri dibuat di beberapa tabel lain yang saya miliki di aplikasi.

Bagaimana saya mencoba membuat pengguna super -

A. Dengan meneruskan perintah kontainer -

Pilihan 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"

Di log - saya tidak melihatnya mencoba menjalankan perintah khusus.

Pilihan 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"

Untuk ini, saya membuat file createsuperuser.py di bawah /management/commands/ mengikuti struktur init.py di kedua folder dan satu createsuperuser.py di bawah perintah -

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")

Mengenai hal ini, saya mendapat pesan berikut dari log -

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

Pertanyaan saya adalah -

  1. mengapa saya tidak dapat membuat pengguna super dari baris perintah virtual env saya? Di dalamnya saya menerima pesan seperti ini -

    raise ImproperlyConfigured("settings.DATABASES tidak dikonfigurasi dengan benar. " Django.core.Exceptions.ImproperlyConfigured: settings.DATABASES tidak dikonfigurasi dengan benar. Harap berikan nilai ENGINE. Periksa dokumentasi pengaturan untuk rincian lebih lanjut.

Agak aneh mengingat perintah makemigrations berfungsi dengan baik.

Dan ketika saya menggemakan $DJANGO_SETTINGS_MODULE, saya mendapatkan pengaturan yang tepat

nama aplikasi.pengaturan

Beri tahu saya di mana kesalahan saya dalam membuat pengguna super?


person nishith83    schedule 10.07.2016    source sumber


Jawaban (3)


Saya memecahkan masalah ini baru-baru ini dengan salah satu contoh penerapan aplikasi saya di pohon kacang. Saya kebanyakan mengikuti dokumentasi resmi dari tautan

  1. Di folder aplikasi Django Anda, buat 'manajemen' paket python
  2. buat paket lain di dalam 'perintah' paket manajemen
  3. buat file python di paket perintah 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. Di berkas Django-migrate.config Anda, tambahkan perintah kedua

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

  5. lakukan python Manage.py Collectstatic dan eb deploy.

Melakukan hal ini menciptakan pengguna super untuk saya. Saya tidak perlu menambahkan PYTHONPATH seperti yang dijelaskan dalam beberapa jawaban yang tersedia online.

person Deepesh Pandey    schedule 25.07.2019

Berkas khusus Anda diberi nama "createsuperuser.py" yang sama dengan perintah Django, dan tabrakan itulah yang menyebabkan masalah. Gunakan "createsu.py" untuk nama file, lalu pastikan untuk mengubah file konfigurasi agar juga menggunakan "createsu."

person thrillhouse    schedule 10.11.2018
comment
Saya menemukan jawabannya dan mengedit komentar asli saya. Saya merasa agak aneh bahwa saya dapat menjawab tanpa perwakilan tetapi tidak dapat berkomentar! Saya sangat jarang mendapatkan jawaban atas pertanyaan di sini, tetapi di sini saya hanya ingin mengirim pesan ke poster asli pertanyaan tersebut dan melihat apakah dia pernah menemukan jawabannya. Saya kira itu hanya kekhasan stackoverflow yang belum saya pahami. - person thrillhouse; 10.11.2018

Anda tidak dapat menggunakan buat pengguna super dalam situasi di mana pengguna tidak dapat memasukkan info. Lihat https://realpython.com/blog/python/deploying-a-django-app-to-aws-elastic-beanstalk/#Create.the.Admin.User untuk pendekatan yang berbeda.

person user7218711    schedule 28.11.2016