问题描述
我有一个Django项目,该项目已部署到Elastic Beanstalk Amazon Linux 2 AMI.我安装了PyMySQL来连接数据库,并将这些行添加到settings.py中,如下所示;
I have a Django project which is deployed to Elastic Beanstalk Amazon Linux 2 AMI. I installed PyMySQL for connecting to the db and i added these lines to settings.py such as below;
import pymysql
pymysql.version_info = (1, 4, 6, "final", 0)
pymysql.install_as_MySQLdb()
我也有一个用于迁移数据库的.config文件;
And also i have a .config file for migrating the db;
container_commands:
01_migrate:
command: "django-admin.py migrate"
leader_only: true
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: mysite.settings
通常,我在Linux AMI上使用.c文件使用mysqlclient
,但在Linux 2 AMI上不起作用,因此我安装了PyMySQL.现在,我正在尝试部署项目的更新版本,但出现如下错误:
Normally, i was using mysqlclient
on my Linux AMI with this .config file but it doesn't work on Linux 2 AMI so i installed the PyMySQL. Now, i'm trying to deploy the updated version of my project but i'm getting an error such as below;
Traceback (most recent call last):
File "/opt/aws/bin/cfn-init", line 171, in <module>
worklog.build(metadata, configSets)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 129, in build
Contractor(metadata).build(configSets, self)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 530, in build
self.run_config(config, worklog)
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
我该如何解决此问题?
推荐答案
Amazon Linux 2的设置与AL1完全不同,并且截至2020年7月24日的当前文档已过时. beantalk所安装的环境中的django-admin
似乎不在路径上,因此您可以获取要激活的环境并确保它已存在.
Amazon Linux 2 has a fundamentally different setup than AL1, and the current documentation as of Jul 24, 2020 is out of date. django-admin
of the installed environment by beanstalk does not appear to be on the path, so you can source the environment to activate and make sure it is.
我在此处留下了答案,其中更详细地说明了我如何得出此答案,但是解决方案(我不喜欢)是:
I left my answer here as well which goes into much more detail in how I arrived at this answer, but the solution (which I don't love) is:
container_commands:
01_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
leader_only: true
即使我不喜欢它,但我已经通过AWS Support进行了验证,实际上这是推荐的方法.您必须采购python环境,就像AL2一样,他们使用虚拟环境来保持一致性.
Even though I don't love it, I have verified with AWS Support that this is in fact the recommended way to do this. You must source the python environment, as with AL2 they use virtual environments in an effort to stay more consistent.
这篇关于命令01_migrate在Amazon Linux 2 AMI上失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!