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

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

无论如何,您认为将 django 应用程序从开发版移动到生产版时最可能发生的错误是什么?

最好的

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

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

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

有帮助吗?

解决方案

我通常遇到的问题包括:

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

我缓解这些问题的方法:

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

其他提示

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

  1. 您可以使 Django 在发生异常时发送消息,提供有关异常的详细信息。看着 这里 了解详情。
  2. 如果您在产品服务器上设置一个测试环境(例如 test.example.com),那么您会更好,以便您可以在部署应用程序之前检查事情是否顺利。

我相信这些是我听到最近(从PYCON 2009)的播客:

  

现实世界中的(2009 PYCON)找到的Django:

     

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

     

零件1〜3

非常好的介绍设计你的应用程序部署,特别是再利用和重新部署。

REGS。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top