将Django应用从开发环境迁移到生产环境时常见错误?

5 投票
3 回答
863 浏览
提问于 2025-04-15 15:31

我正在Windows上开发一个django应用,使用SQLite和django开发服务器。现在我把它部署到了我的主机服务器上,那个服务器运行的是Linux、Apache、FastCgi和MySQL。

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

无论如何,你认为在将django应用从开发环境转到生产环境时,最可能出现的错误是什么呢?

祝好

更新:我觉得预生产环境是解决这类问题的最佳方法。但我想列一个清单,看看在正式上线之前需要做些什么。感谢到目前为止我收到的非常有价值的回答 :)

更新:顺便说一下,我已经按照shanyu的建议实现了预生产服务器和邮件通知,现在我发现错误来自我在这个新版本中使用的smart_if模板标签。关于模板标签有什么技巧吗?

更新:我想我已经解决了这个问题,原因可能是Filezilla FTP传输时的设置。我当时使用的是“如果更新则替换”选项,我猜这导致了一些意想不到的结果。使用“全部替换”选项解决了这个问题。不过,这也是我学习更多关于部署的机会。感谢你的回答。

3 个回答

0

我最近听过的播客大概是这些(来自2009年的Pycon会议):

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

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

第一到第三部分

这是一个非常好的介绍,教你如何设计应用程序以便于部署,特别是为了重复使用和重新部署。

祝好。

1

关于你的情况,我想到两个简单的方法可能对你有帮助:

  1. 你可以让Django在出现错误时发送消息,告诉你错误的详细信息。具体可以查看这里
  2. 如果你在生产服务器上设置一个测试环境(比如说,test.example.com),这样在正式上线之前,你就可以先检查一下应用是否能顺利运行。
7

我通常遇到的问题包括:

  1. 生产环境设置配置错误,比如在我的生产环境的localsettings.py、wsgi/cgi,或者在/etc/sites-available里的apache站点文件中。
  2. 数据库差异。我使用South来进行数据库迁移,但在PostgreSQL上迁移时遇到了一些细微的问题,而在sqlite上却很顺利。
  3. 静态文件托管,因为我在开发时使用Django服务器,所以有点偷懒。
  4. 权限问题,包括文件系统和数据库中的权限。
  5. 虽然不常见,但有可能出现网络问题,导致我无法获取依赖项,无论是在PyPi还是其他第三方网站上。

我缓解这些问题的方法:

  • 在生产和开发中使用相同的数据库(在你的情况下,MySQL到处都用)。
  • 我发现有一个“测试”环境非常有用,它尽可能地模拟生产环境(可以使用低配置的硬件,甚至是在同一台机器上)。这样,如果在这个“类似生产”的环境中出现问题,我可以在不影响生产服务器的情况下解决它们。
  • 将所有操作脚本化,以便可以重复部署。我使用fabric,但zc.buildout或Paver也可以。这些工具可以减少部署时的打字错误,并缩短应用程序的部署时间。
  • 使用版本控制工具(如mercurial、git、subversion)和模式迁移工具(像South),这样如果在生产环境部署时出现问题,你可以撤回更改,让生产环境继续使用旧代码和旧数据库模式。
  • 我还没有设置“egg代理”,但我在考虑这样做,以避免下载依赖时出现问题。
  • 我发现pip的依赖冻结功能很有用,以防在我最初下载库后发生了不兼容的新变化。
  • 使用像Windmill或Selenium这样的网页测试框架,在我的“测试”环境中测试我的应用,这样我可以快速获得系统的广泛测试覆盖。

撰写回答