将django应用程序从dev移动到prod时常见的错误?

时间:2009-10-30 06:42:16

标签: python django production-environment

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

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

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

最佳

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

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

更新:我想我已经修复了我认为由Filezilla FTP发送引起的pb。我正在使用“替换为更新”选项,我猜这会导致一些意想不到的结果。使用“全部替换”选项可以解决问题。但是,我有机会了解有关部署的更多信息。 Thansk为你的答案。

3 个答案:

答案 0 :(得分:7)

我通常遇到的问题包括:

  1. 配置错误的制作设置,无论是在我的作品localsettings.py,wsgi / cgi,还是/ etc / sites-available中的apache网站文件
  2. 数据库差异。我使用South进行迁移,并且当它在sqlite中顺利运行时,在PostgreSQL上执行迁移时遇到了一些微妙的问题。
  3. 静态文件托管,因为我在开发中欺骗并使用Django服务器
  4. 文件系统和数据库中的权限
  5. 罕见但可能的网络问题阻止我获取我的依赖关系,无论是在PyPi还是某些第三方网站
  6. 我已经减轻了这些问题的方法:

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

答案 1 :(得分:1)

关于你的情况,我可以想到两个可以帮助你的简单事项:

  1. 您可以启用Django在发生异常时发送消息,提供有关它们的详细信息。有关详细信息,请查看here
  2. 如果您在prod服务器(例如test.example.com)上设置测试环境,那么您将会感觉更好,这样您就可以在部署应用程序之前检查事情是否顺利。

答案 2 :(得分:0)

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

  

在真实世界中找到Django(PyCon 2009):

     

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

     

第1至3部分

非常好地介绍设计应用程序以进行部署,尤其是重用和重新部署。

REGS。