繁体   English   中英

Elastic Beanstalk Python 3.7 上的容器命令在 Django 中失败

[英]Container command fails in Django on Elastic Beanstalk Python 3.7

我在 Elastic Beanstalk (Amazon Linux 2) 上使用 Django Python 3.7 并且以下命令失败:

container_commands:
  01_migrate:
    command: "pipenv run python ./manage.py migrate"
    leader_only: true
2020-07-17 09:31:57,017 [ERROR] Command 01_migrate (pipenv run python ./manage.py migrate) failed
2020-07-17 09:31:57,017 [ERROR] Error encountered during build of postbuild_0_sarahandanatol: Command 01_migrate failed
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 260, in build
    changes['commands'] = CommandTool().apply(self._config.commands)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py", line 117, in apply
    raise ToolError(u"Command %s failed" % name)
ToolError: Command 01_migrate failed

我试图在我的沙盒帐户上复制这个问题 它是带有欢迎屏幕的 django 的最小版本。 没有数据库,也没有使用环境变量。

我的Pipfile也很小:

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
django = "*"
djangorestframework = "*"

[requires]
python_version = "3.7"

我可以确认使用普通 pipenv 失败 具体来说,我的.ebextantions中有以下配置文件

container_commands:
  10_migrate:
    command: |
      pipenv run python ./manage.py migrate

错误消息是关于缺少 Django

但是,对我来说,解决方案如下:

container_commands:
  10_migrate:
    command: |      
      source $PYTHONPATH/activate
      pipenv run python ./manage.py migrate

这会激活 python 环境,EB 在执行 pipenv 之前使用该环境安装 Pipfile 依赖项。

下面是一个版本,它还将加载运行迁移作业可能需要的 EB 环境变量,如果您传递了数据库连接详细信息的话。

container_commands:
  10_migrate:
    command: |
      export $(cat /opt/elasticbeanstalk/deployment/env | xargs)
      source $PYTHONPATH/activate
      pipenv run python ./manage.py migrate

这是来自/var/log/cfn-init-cmd.log的示例 output,显示迁移运行成功:

20-07-18 04:50:41,615 P3836 [INFO] Command 10_migrate
2020-07-18 04:50:42,969 P3836 [INFO] -----------------------Command Output-----------------------
2020-07-18 04:50:42,969 P3836 [INFO]    cat: /opt/elasticbeanstalk/deployment/env: No such file or directory
2020-07-18 04:50:42,969 P3836 [INFO]    export EB_IS_COMMAND_LEADER="true"
2020-07-18 04:50:42,969 P3836 [INFO]    export HOME="/root"
2020-07-18 04:50:42,969 P3836 [INFO]    export MYVAR="my-eb-env-value"
2020-07-18 04:50:42,969 P3836 [INFO]    export OLDPWD
2020-07-18 04:50:42,970 P3836 [INFO]    export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
2020-07-18 04:50:42,970 P3836 [INFO]    export PWD="/var/app/staging"
2020-07-18 04:50:42,970 P3836 [INFO]    export PYTHONPATH="/var/app/venv/staging-LQM1lest/bin"
2020-07-18 04:50:42,970 P3836 [INFO]    export SHLVL="4"
2020-07-18 04:50:42,970 P3836 [INFO]    export _="/bin/jq"
2020-07-18 04:50:42,970 P3836 [INFO]    Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
2020-07-18 04:50:42,970 P3836 [INFO]    Operations to perform:
2020-07-18 04:50:42,970 P3836 [INFO]      Apply all migrations: admin, auth, contenttypes, sessions
2020-07-18 04:50:42,970 P3836 [INFO]    Running migrations:
2020-07-18 04:50:42,970 P3836 [INFO]      Applying contenttypes.0001_initial... OK
2020-07-18 04:50:42,970 P3836 [INFO]      Applying auth.0001_initial... OK
2020-07-18 04:50:42,970 P3836 [INFO]      Applying admin.0001_initial... OK
2020-07-18 04:50:42,970 P3836 [INFO]      Applying admin.0002_logentry_remove_auto_add... OK
2020-07-18 04:50:42,970 P3836 [INFO]      Applying admin.0003_logentry_add_action_flag_choices... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying contenttypes.0002_remove_content_type_name... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0002_alter_permission_name_max_length... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0003_alter_user_email_max_length... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0004_alter_user_username_opts... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0005_alter_user_last_login_null... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0006_require_contenttypes_0002... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0007_alter_validators_add_error_messages... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0008_alter_user_username_max_length... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0009_alter_user_last_name_max_length... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0010_alter_group_name_max_length... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying auth.0011_update_proxy_permissions... OK
2020-07-18 04:50:42,971 P3836 [INFO]      Applying sessions.0001_initial... OK

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM