Django AWS Elastic Beanstalk 部署失败 - 服务器内部错误

1 投票
1 回答
3230 浏览
提问于 2025-04-18 14:54

我正在跟着这个教程:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Python_django.html

现在我到了第六步。我已经创建了我的AWS Elastic Beanstalk Python应用程序,现在想把它和我的Django应用程序连接起来。

这是我的文件夹结构:

~/Documents/myapp
myapp manage.py requirements.txt .ebextensions .elasticbeanstalk .git .gitignore

在我的.ebextensions文件夹里有一个myapp.config文件:

container_commands:
    01_syncdb:    
        command: "django-admin.py syncdb --noinput"
        leader_only: true

option_settings:
    - namespace: aws:elasticbeanstalk:container:python
        option_name: WSGIPath
        value: myapp/wsgi.py
    - option_name: DJANGO_SETTINGS_MODULE
        value: myapp.settings
    - option_name: AWS_SECRET_KEY
        value: myUsersSecretKey
    - option_name: AWS_ACCESS_KEY_ID
        value: myUsersAcessKey

~/Documents/myapp/myapp

里有我的settings.py、views.py等文件。我在settings.py里设置了数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ['RDS_DB_NAME'],
        'USER': os.environ['RDS_USERNAME'],
        'PASSWORD': os.environ['RDS_PASSWORD'],
        'HOST': os.environ['RDS_HOSTNAME'],
        'PORT': os.environ['RDS_PORT'],
    }
}

就像教程里说的那样。然后我执行了

git add .
git commit -m "eb configuration"
git aws.push

系统提示环境更新成功启动。等我等到状态准备好后,我去访问网址,结果还是AWS Elastic Beanstalk的成功页面,而不是我的Django应用程序。你知道为什么吗?

编辑:然后我尝试跟着这个视频教程:

https://www.youtube.com/watch?v=YJoOnKiSYws(在7:44暂停)

并把我的配置文件改成了:

container_commands:
    01_syncdb:    
        command: "django-admin.py syncdb --noinput"
        leader_only: true

option_settings:
    - namespace: aws:elasticbeanstalk:container:python
        option_name: WSGIPath
        value: myapp/wsgi.py
    - option_name: DJANGO_SETTINGS_MODULE
        value: myapp.settings
    - namespace: aws:autoscaling:launchconfiguration
        option_name: EC2KeyName
        value: myKeyPairName

现在当我在状态准备好后刷新页面时,出现了内部服务器错误,提示:

The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the sever administrator, root@localhost and inform them of the time and error occured, and anything you might have done that may have acused the error.
More information about this error may be available in the server error log.

编辑2:

我的wsgi.py文件在处理AWS Elastic Beanstalk时应该是什么样子吗?我把wsgi.py文件保持在最初创建时的样子,因为教程也是这样做的。这是我的wsgi.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ayflare.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

1 个回答

0

我觉得这里有几个要点:

  • 你可以试试在配置中使用“python manage.py syncdb --noinput”,而不是用“django-admin.py”。我记得在我切换到“python manage.py”之前遇到过一些问题。

  • 另一个值得做的事情是,在你的django设置文件中开启DEBUG,这样你可以看到更详细的错误信息,帮助你找出问题所在。

  • 有时候,如果你在部署EB的时候搞错了,重建环境可以帮助你解决问题,只要你在代码或配置文件中理清楚了。你可以在AWS管理控制台的Elastic Beanstalk页面进行这个操作。

  • 你的第一个myapp.config文件看起来是正确的。不过,如果你是按照官方的亚马逊文档来做的,那么从youtube视频中得到的更新版本似乎不太对。

撰写回答