django - Elastic Beanstalk Python 3.7 上的 Django 中的容器命令失败
问题描述
我在 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
这将激活 EB 用于在执行 pipenv 之前安装 Pipfile 依赖项的 python 环境。
下面是一个版本,它还将加载运行迁移作业可能需要的 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
显示成功迁移运行的示例输出:
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
推荐阅读
- javascript - javascript/html + nodejs
- apache-kafka - Kafka Streams:内部主题分区
- javascript - 将 Firestore 数据检索到数组中不起作用
- ruby-on-rails - 使用数据库中的布尔值填充 options_for_select 中的选定选项
- css - 如何使用 React 和 MaterializeCSS 进行表格分页
- javascript - 如何创建使用 HTML 输入和按钮元素的 JavaScript 随机数生成器?
- go - 如何使用 go/golang 中的 FileServer 函数将文件提供给特定的 url 路径
- angular - Angular - 无法解析组件 ng build --prod 的所有参数
- bash - 在(最后一个)目录之后重命名文件
- c++ - 在 C++ 中将两个返回 unique_ptr 和 shared_ptr 的工厂方法合并为一个?