我已经陷入了一个瓶颈,我试图解决使用官方文档和其他答案在stackoverflow这里,但仍然不能创建django超级用户在beanstalk环境编程。
当前状态- A。应用程序正在顺利部署,我能够从我的UI应用程序访问数据库。基本上,该条目是在其他一些表中,我在应用程序中。
我是如何创造超级用户的-
a.借传递容器命令─
选择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/下创建了一个www.example.com文件,在两个文件夹中遵循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", "admin@gmail.com", "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.为什么我不能从我的虚拟环境的命令行创建一个超级用户?因为我收到这样的消息-
raise配置不正确(“设置.数据库配置不正确.“django.core.exceptions.配置不正确:设置。DATABASE配置不正确。请提供ENGINE值。有关详细信息,请查看设置文档。
考虑到makemigrations命令工作正常,有点奇怪。
当我回显$DJANGO_SETTINGS_MODULE时,我得到了正确的设置
appname.settings
让我知道我在创建超级用户的事情上哪里出错了?
6条答案
按热度按时间olmpazwi1#
我最近用beanstalk中的一个示例应用程序部署解决了这个问题。
1.在你的django应用文件夹中创建python包'management'
1.在管理包“commands”中创建另一个包
1.在命令包www.example.com中创建python文件mysuperuser.py
1.在django-migrate.config文件中,添加第二个命令
02_create_superuser_for_django_admin: command: "python manage.py mysuperuser" leader_only: true
1.做pythonmanage.py收集静态和eb部署.
这样做为我创建了一个超级用户,我不需要添加任何PYTHONPATH,就像网上一些答案中描述的那样。
g2ieeal72#
您的自定义文件名为“createsuperuser.py“,与Django命令相同,冲突就是导致问题的原因。使用“createsu.py“作为文件名,然后确保更改配置文件也使用“createsu”。
hsgswve43#
我花了很长时间来研究如何做到这一点,这是迄今为止最简单和最安全的方法。创建以下文件***.platform〉hooks〉postdeploy〉01_migrate.sh***并输入以下内容:
然后,您可以将
DJANGO_SUPERUSER_PASSWORD
、DJANGO_SUPERUSER_USERNAME
、DJANGO_SUPERUSER_EMAIL
添加到应用程序环境的配置部分,它将知道我们指定--noinput
时要使用这些配置。然后添加下面的文件夹***. ebextensions〉django.config***.这只是解决了运行
01_migrate.sh
时的权限问题这将以一种安全的方式创建您的超级用户,使用相同的逻辑,您还可以运行迁移并通过添加到
01_migrate.sh
文件来收集静态数据。sxissh064#
我有一个@jimbo的答案的简单版本,在
.ebextensions/db-migrate.config
中我有以下代码:其中的关键行是
02_createsuperuser
容器命令。获得该命令后,您可以在环境中设置DJANGO_SUPERUSER_PASSWORD
、DJANGO_SUPERUSER_USERNAME
和DJANGO_SUPERUSER_EMAIL
环境变量,然后进行部署。创建用户后,删除该容器命令,这样它就不会在下一次部署中再次运行。jexiocij5#
deepesh和jimbos组合解决方案为我做到了。
如果您有一个自定义用户,则此选项特别有用。
我会把步骤写下来。
1在management/command下创建命令文件,不要命名为createsuperuser.py,避免冲突。
2命令文件应如下所示。
3在环境〉配置〉软件〉环境属性中添加SUPERUSER_PASSWORD
4提交和eb部署。
我们仍然在存储原始密码,这不是世界上最安全的事情。但是它比在命令文件中硬编码密码安全得多。
kmpatx3s6#
在用户无法输入信息的情况下,不能使用创建超级用户。请参阅https://realpython.com/blog/python/deploying-a-django-app-to-aws-elastic-beanstalk/#Create.the.Admin.User了解其他方法。