【问题标题】:Deploying Django to Elastic Beanstalk, /opt/python does not exist将 Django 部署到 Elastic Beanstalk,/opt/python 不存在
【发布时间】:2020-10-11 10:29:19
【问题描述】:

在过去的 4-5 天里,我在部署我的 django 应用时一直在尝试解决同样的问题。

问题如下。

我的迁移命令失败,迁移配置文件如下

container_commands:

01_migrate:

command: "python3 manage.py migrate"

leader_only: true



option_settings:

aws:elasticbeanstalk:application:environment:

DJANGO_SETTINGS_MODULE: djangomicroblog.settings

我还尝试将命令更改为许多不同的内容,包括:

command: "python manage.py migrate"

command: "django-admin.py migrate"

command: "/opt/python/run/venv/bin/python3 manage.py migrate"

不同的命令给我不同的错误,python manage.py migrate 报告:

2020-06-21 13:15:48,639 P8373 [INFO] File "manage.py", line 16

2020-06-21 13:15:48,639 P8373 [INFO] ) from exc

2020-06-21 13:15:48,639 P8373 [INFO] ^

2020-06-21 13:15:48,640 P8373 [INFO] SyntaxError: invalid syntax

我认为这是因为它试图用 python2 执行

Python3 manage.py 迁移报告:

2020-06-21 13:12:37,445 P8066 [INFO] Traceback (most recent call last):

2020-06-21 13:12:37,445 P8066 [INFO] File "manage.py", line 10, in main

2020-06-21 13:12:37,445 P8066 [INFO] from django.core.management import execute_from_command_line

2020-06-21 13:12:37,445 P8066 [INFO] ModuleNotFoundError: No module named 'django'

2020-06-21 13:12:37,445 P8066 [INFO]

2020-06-21 13:12:37,445 P8066 [INFO] The above exception was the direct cause of the following exception:

2020-06-21 13:12:37,445 P8066 [INFO]

2020-06-21 13:12:37,445 P8066 [INFO] Traceback (most recent call last):

2020-06-21 13:12:37,445 P8066 [INFO] File "manage.py", line 21, in <module>

2020-06-21 13:12:37,445 P8066 [INFO] main()

2020-06-21 13:12:37,445 P8066 [INFO] File "manage.py", line 16, in main

2020-06-21 13:12:37,445 P8066 [INFO] ) from exc

2020-06-21 13:12:37,446 P8066 [INFO] ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?

所以我一直在尝试找到互联网上说应该在 /opt/python/ 中的虚拟环境(我通过 ssh 和 sudo su 访问),但是这个目录根本不存在

我的目录结构如下:

我现在唯一的想法是我的应用程序是用 python 3.8 编写的,因此 requirements.txt 来自 3.8 导致不兼容?但如果是这种情况,我不知道如何解决这个问题。

【问题讨论】:

    标签: python django amazon-web-services amazon-ec2 amazon-elastic-beanstalk


    【解决方案1】:

    它不起作用的原因很可能是因为您使用的是Amazon Linux 2的EB环境,而您的应用程序是为Amazon Linux 1开发的。

    因此它在错误的位置寻找python。要解决此问题,请确保您为Amazon Linux 1 而不是Amazon Linux 2 创建python 环境。

    AL1 和 AL2 之间存在许多差异,这使得它们不兼容

    【讨论】:

    • 非常感谢!原来我的应用程序混合了 AL1 和 AL2 设置,但 env 在 AL2 上运行。将应用程序中的一些配置恢复为 AL1 设置,现在正在使用带有 python 3.6 的 AL2 环境,它已启动并运行!我看过的教程/资源都没有提到我必须使用 AL1(我猜是因为它是新的?),所以我假设我只想在创建 env 时使用最新的 python 版本(恰好是 3.7 AL2)。
    • @BillieM 没问题。如果我的回答有帮助,我们将不胜感激。
    • 完成 :) 祝你有美好的一天
    • @BillieM AL2 非常新,因此大多数教程和指南都是关于 AL1 的。
    猜你喜欢
    • 2020-03-24
    • 2020-10-08
    • 2017-02-24
    • 2017-10-12
    • 2015-10-25
    • 2015-09-18
    • 1970-01-01
    • 2017-04-07
    • 2015-09-06
    相关资源
    最近更新 更多