在Heroku上部署Django应用的最佳实践

3
我正在开发一个Django应用程序,目前已经完成了大约50%的工作。我想要开始向人们展示它,因此需要将其部署。我已经决定将其托管在Heroku上。我希望从一开始就做得正确,因此下面是我的问题列表...
以下是当前状态:
- 我想要使用Heroku中的新管道功能。这样我可以轻松地在我的应用程序的暂存和生产版本之间切换。 - 我想要使用CI服务器(目前我正在寻找circleci.com)。 - 我正在使用Python 3.5。 - 我希望尽可能自动化部署过程,例如运行迁移和测试(如果需要)等。 - 不确定是否重要,但我的代码托管在Bitbucket上。
所以,我的问题是:
  1. CI服务器显然会运行测试。我是否也应该在Heroku的暂存和生产dyno上运行我的测试?
  2. 我应该直接从CI服务器部署到Heroku吗?
  3. 我应该使用哪些工具来自动化部署?我不能使用fabric(仅适用于python2),invoke看起来还没有完全准备好。如果我只编写自己简单的部署脚本,这样可以吗?
  4. 然后还有一堆其他工具,比如docker和tox,但我不确定我是否需要它们?
  5. 在将Django应用程序部署到Heroku时,还有什么其他事项需要注意?
1个回答

3
  1. 我不确定您是想运行单元测试还是验收测试,但是肯定不会在生产环境中运行它们(验收测试会破坏您的数据 - 如果您正在进行分析)。
  2. 对于第二个问题的答案取决于个人喜好。实际上连续集成意味着,如果您将某些内容推送到主分支,并且它通过了每个测试,则可以发布,因此它会立即生效。这是个好主意,但是如果您想要在特定时间让某个功能上线,而且您不想混淆功能开关怎么办?我认为按一个按钮并不太痛苦。
  3. 我认为Bash脚本足以简化构建流程(我浪费了2天时间在grunt流程上之后才发现)。
  4. Docker是一个很棒的工具,但如果您只是构建单个Django应用程序,我认为没有必要使用它。它只会让事情变得更加困难(而且我猜这意味着您还没有相关经验,因此可能会引起很多麻烦)。
  5. 请确保您的Django秘密未提交到Bitbucket:https://github.com/matyasfodor/todo-django/blob/911614c7e41f58debe4a6369c9f0fa3cad0c52a2/todo/settings.py#L23(以及没有其他秘密..)。

谢谢,这非常有帮助。至于第一点,我在谈论单元测试。我应该在Heroku的暂存服务器上运行单元测试吗?那在生产服务器上呢?当我在本地开发和测试时,测试运行程序会创建一个独立的测试数据库,在测试完成后销毁它,保持我的当前数据库不受影响。我猜在Heroku上运行测试时也可以做类似的操作,或者不是这样吗? - Kritz
在我看来,单元测试的重点是验证函数内部的功能,并且环境应该是模拟的。因此,在生产环境中没有运行它们的理由,单元测试只应该在 CI 服务器上运行,而不是在演示或生产服务器上运行。 - fodma1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接