【问题标题】:Best practices for deploying a Django app on Heroku在 Heroku 上部署 Django 应用的最佳实践
【发布时间】:2016-06-17 07:18:41
【问题描述】:

我正在开发一个 Django 应用程序,我已经完成了大约 50%。我在一个我想开始向人们展示它的地方,因此我需要部署它。我已经决定将它托管在 Heroku 上。我想从一开始就正确地做到这一点,因此我的问题清单如下......

这是目前的情况:

  • 我想使用 Heroku 中的新管道功能。这样我可以 在我的应用的暂存版本和生产版本之间轻松切换。
  • 我想使用 CI 服务器(目前我正在查看 circleci.com)
  • 我使用的是 Python 3.5
  • 我想在部署中尽可能地自动化 过程,例如运行迁移和测试(如果需要)等。
  • 不确定是否重要,但我的代码托管在 Bitbucket 中

所以,我的问题是:

  1. CI 服务器显然运行测试。我应该在 Heroku 上的登台和生产测功机也一样吗?
  2. 我应该从 CI 服务器直接部署到 Heroku 吗?
  3. 我应该使用哪些工具来自动化部署?我不能使用织物(仅限 python2),invoke 看起来还没有准备好生产。我自己写个简单的部署脚本可以吗?
  4. 还有一堆我读过的其他工具,例如 docker 和 tox,但我不确定我是否需要它们中的任何一个?
  5. 在将 Django 应用程序部署到 Heroku 时,我还有什么需要注意的吗?

【问题讨论】:

    标签: python django heroku deployment


    【解决方案1】:
    1. 我不清楚您是要运行单元测试还是验收测试,但我肯定不会在生产环境中运行它们。 (AT 会弄乱您的数据 - 如果您正在进行分析)
    2. 第二个问题的答案取决于偏好。实际的持续集成意味着,如果您将某些东西推送到 master,并且它通过了所有测试,那么它就可以运行,所以它会上线。这是一个好主意,但是如果您希望某个功能在特定时间上线,并且不想弄乱功能切换怎么办?我认为按下按钮不会太痛苦。
    3. 我认为 bash 脚本足以简化构建(我是在浪费了 2 天的时间后才这么说的。)
    4. Docker 是一个很棒的工具,原因有很多,但如果您正在构建单个 Django 应用程序,我认为没有必要使用它。它只会让事情变得更加困难(我想这意味着你还没有经历过 +1 的事情,所以它可能会引起很多麻烦)
    5. 确保您的 Django 机密未提交给 bitbucket:https://github.com/matyasfodor/todo-django/blob/911614c7e41f58debe4a6369c9f0fa3cad0c52a2/todo/settings.py#L23(并且没有其他机密......)

    【讨论】:

    • 谢谢,这很有帮助。至于第 1 点,我说的是单元测试。我应该在 Heroku 登台服务器上运行单元测试吗?在生产服务器上运行它怎么样?当我在本地开发和测试时,测试运行程序会创建一个单独的测试数据库,它会在测试运行后销毁它,从而使我当前的数据库保持完好。我假设在 Heroku 上运行测试时我可以做类似的事情,还是不是这样?
    • 在我看来,单元测试的重点是验证函数内部的功能,并且应该模拟环境。所以没有理由在生产中运行它们,单元测试应该只在 CI 服务器上运行,而不是在暂存或生产服务器上运行。
    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多