【问题标题】:No Such File or Directory when Deploying Django to Elastic Beanstalk with Immutable Deployment Policy使用不可变部署策略将 Django 部署到 Elastic Beanstalk 时没有此类文件或目录
【发布时间】:2020-11-06 23:50:33
【问题描述】:

我已经将我的 Django 项目部署到 AWS 上的 EB 并且运行良好。

我现在尝试使用不可变部署策略来部署它,但我收到了这个错误:

Command failed on instance. Return code: 2 Output: python: can't open file '/opt/python/current/app/manage.py': [Errno pt/python/current/app/manage.py': [Errno 2] No such file or directory.

这发生在命令期间:source /opt/python/current/env && python /opt/python/current/app/manage.py migrate

由于某种原因,我无法在第一次部署中包含该命令。

有人知道如何在 Django 中使用不可变部署方法吗?

【问题讨论】:

  • 您使用的是 Amazon Linux 1 还是 2?
  • 根据您在我之前的一个问题中所说的,Amazon Linux 1
  • 啊,是的。我现在记得 :-) 我认为问题是 current 文件夹在部署期间还不存在。仅当应用部署成功时才可用。
  • 我不知道这是否是唯一的解决方案,但我基本上是在尝试复制 Heroku 使用的部署策略。我假设将新版本部署到一个新实例,这允许当前 EC2 实例仍然运行,并且一旦新实例准备就绪,它们就会被交换。
  • 没错,不可变部署就是用来做这个的。

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


【解决方案1】:

以下内容:

source /opt/python/current/env && python /opt/python/current/app/manage.py migrate

当您通过 ssh 进入 EB 实例并希望使用环境变量手动运行代码时很有用。

在我看来,当您部署 EB 时,.ebextensions 中的 container_commands 会更好。

例如,您可以拥有以下文件.ebextensions/10_run_migrate.config

container_commands:
  10_run_migrate:
    command: 'python ./manage.py migrate'

请注意,这只是一个示例。因此,该文件可能需要使用 Django 特定的命令或设置进行调整。

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 2020-03-24
    • 2021-01-03
    • 2015-07-02
    • 2017-04-07
    • 2020-10-11
    • 1970-01-01
    • 2020-05-09
    • 2020-10-08
    相关资源
    最近更新 更多