将 .env 文件添加到 gitignore 后,Django 弹性 beanstalk CLI 部署失败
Posted
技术标签:
【中文标题】将 .env 文件添加到 gitignore 后,Django 弹性 beanstalk CLI 部署失败【英文标题】:Django elastic beanstalk CLI deployment failure after adding .env files to gitignore 【发布时间】:2022-01-04 13:47:35 【问题描述】:我是 Django/EB/Git 的新手,一直在做一个 django 项目,并成功地分离了我的设置并分离了用于开发和生产的 .env 文件,这些文件都按预期工作并已部署 - 请参阅以下项目结构:
项目结构
project root
myapp
settings
__init__
base.py
dev.py
prod.py
.env.dev
.env.prod
.gitignore
manage.py
requiremnts.txt
但是,当我将 .env 文件添加到 .gitignore 文件时,我现在在 eb 日志 (cfn-init-cmd.log) 中收到以下部署错误:
.gitignore
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
.env.dev
.env.prod
错误:eb 日志 (cfn-init-cmd.log) FileNotFoundError:[Errno 2] 没有这样的文件或目录:'.env.prod'
如果我从 .gitignore 文件中删除 .env.prod,那么我的项目部署成功。
此外,我在网上阅读可能是由于我将 .env.prod 文件添加到 repo 中,但我相信当我重新开始并重新创建 git repo 时,我也排除了 git add/commit以下命令(在本地项目上运行的命令):
git add --all -- :!.env.dev :!.env.prod
git commit -m "Initial commit"
接着是:
eb deploy myproject-env
查看我的 .ebextensions 配置文件如下:
.ebextensions/django.config
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: myproject.wsgi:application
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: "myproject.settings.prod"
aws:elasticbeanstalk:environment:proxy:staticfiles:
"/static": "static/"
packages:
yum:
python3-devel: []
mariadb-devel: []
container_commands:
01_collectstatic:
command: "source /var/app/venv/staging-LQM1lest/bin/activate && python manage.py collectstatic --noinput"
02_migrate:
command: "source /var/app/venv/staging-LQM1lest/bin/activate && python manage.py migrate --noinput"
leader_only: true
我不确定是否应该将任何 git 命令添加到我的 .ebextensions 配置中,但假设它只是在本地 git repo 上完成然后推送到 github,我也尝试使用和不使用 codecommit 进行部署,但是与上述没有区别。
我花了大约一周的时间来弄清楚这一切并最终能够部署,我相信这应该是将 .env 文件添加到 .gitignore 文件的最后一步,我只是不确定我是什么'我在 git repo 中遗漏或做了一些我正确的事情。
非常感谢您对此的任何帮助/指导,在此先感谢。
【问题讨论】:
【参考方案1】:如果 .ebignore 文件不存在,则 Elastic beanstalk 使用 .gitignore 文件。因此,您可以将两者都用于文件管理。
AWS doc 说:
您可以告诉 EB CLI 忽略项目中的某些文件 通过将文件 .ebignore 添加到目录中。这个文件 像 .gitignore 文件一样工作。
...
如果 .ebignore 不存在,但 .gitignore 存在,EB CLI 将忽略 .gitignore 中指定的文件。如果存在 .ebignore,则 EB CLI 不读取 .gitignore。
当 .ebignore 存在时,EB CLI 不使用 git 命令来 创建你的源包。这意味着 EB CLI 会忽略文件 在 .ebignore 中指定,并包括所有其他文件。特别是, 它包括未提交的源文件。
【讨论】:
感谢您与我确认这一点,我之前确实尝试过,但这次我显然错误地向 .ebignore 添加了内容,我再次创建了 .ebignore 并包含了在 .gitignore 中找到但添加的 eb 内容。 env 到 .gignore 并且未添加到 .ebignore。以前我在 .ebignore/.gitignore woops 中都有 .env.. 所以有了你的评论,我重新审视了这个,现在可以再次感谢以上是关于将 .env 文件添加到 gitignore 后,Django 弹性 beanstalk CLI 部署失败的主要内容,如果未能解决你的问题,请参考以下文章
.gitignore文件中添加忽略文件或者目录后,不起作用。
text 将目录添加到.gitignore后,从远程存储库中删除目录