5

我正在 Windows、SQLite 和 django dev server 上开发一个 django 应用程序。我已将它部署到运行 Linux、Apache、FastCgi、MySQL 的主机服务器上。

不幸的是,当开发机器上的一切正常时,我在 prod 上的服务器返回了一个错误。我已经向我的供应商询问了预生产解决方案,以便能够调试和理解问题。

无论如何,根据您的说法,将 django 应用程序从 dev 移动到 prod 时最可能发生的错误是什么?

最好的

更新:我认为 pre-prod 是解决此类问题的最佳方法。但我想建立一个在投入生产之前必须做的检查清单。感谢到目前为止我收到的非常有价值的答案:)

更新:仅供参考,我已经按照 shanyu 的建议实现了 preprod 服务器和电子邮件通知,我可以看到错误来自我在这个新版本上使用的smart_if 模板标签。模板标签有什么技巧吗?

更新:我想我已经修复了我认为由 Filezilla FTP 发送引起的 pb。我正在使用“如果更新则替换”选项,我猜这会导致一些意想不到的结果。使用“全部替换”选项可解决此问题。然而,这对我来说是一个了解更多关于部署的机会。谢谢你的回答。

4

3 回答 3

7

我通常遇到的问题包括:

  1. 错误配置的产品设置,无论是在我的产品 localsettings.py、wsgi/cgi 还是 /etc/sites-available 中的 apache 站点文件中
  2. 数据库差异。我使用South进行迁移,并且在 PostgreSQL 上执行迁移时遇到了一些微妙的问题,而它在 sqlite 中运行良好。
  3. 静态文件托管,因为我作弊并在开发中使用 Django 服务器
  4. 文件系统和数据库中的权限
  5. 罕见但可能的网络问题阻止我获取依赖项,无论是在 PyPi 还是某些 3rd 方站点上

我缓解这些问题的方法:

  • 在生产和开发中使用相同的数据库(在你的情况下,到处都是 MySQL)
  • 我发现拥有一个以各种可能方式模拟生产的“测试”环境很有用(它可以在低端硬件上,甚至是同一台机器上)。这样,如果这个“类似生产”的环境中有任何问题,我可以在不让生产服务器离线的情况下解决它们。
  • 编写可重复部署的所有内容。我使用fabric,但 zc.buildout 或 Paver 也可以。这些工具有助于减少部署时的拼写错误,并减少部署我的应用程序的时间。
  • 使用版本控制(mercurial、git、subversion)和模式迁移工具(如 South),因此如果在部署到生产环境时出现问题,您可以撤销更改并允许生产在旧代码上运行使用旧的数据库模式。
  • 我还没有设置“鸡蛋代理”,但我正在考虑它,以避免下载依赖项时出现问题。
  • 我发现pip 的冻结依赖项很有用,以防在我最初下载库后发生新的、不兼容的更改
  • 使用 Windmill 或 Selenium 之类的 Web 测试框架在我的“测试”环境中测试我的应用程序,这样我就可以非常快速地获得系统的大量测试覆盖率。
于 2009-10-30T07:03:38.493 回答
1

关于您的情况,我可以想到两件简单的事情可能对您有所帮助:

  1. 您可以让 Django 在发生异常时发送消息,并提供有关它们的详细信息。详情请看这里
  2. 如果您在产品服务器(例如 test.example.com)上设置一个测试环境,您会更好,这样您就可以在部署应用程序之前检查事情是否会顺利进行。
于 2009-10-30T08:17:44.670 回答
0

我相信这些是我最近收听的播客(来自 Pycon 2009):

在现实世界中定位 Django (PyCon 2009):

http://advocacy.python.org/podcasts/pycon.rss

第 1 至 3 部分

很好地介绍了如何设计用于部署的应用程序,尤其是用于重用和重新部署。

注册。

于 2009-10-30T13:49:29.780 回答