将Django应用从开发环境迁移到生产环境时常见错误?
我正在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
关于你的情况,我想到两个简单的方法可能对你有帮助:
- 你可以让Django在出现错误时发送消息,告诉你错误的详细信息。具体可以查看这里。
- 如果你在生产服务器上设置一个测试环境(比如说,test.example.com),这样在正式上线之前,你就可以先检查一下应用是否能顺利运行。
7
我通常遇到的问题包括:
- 生产环境设置配置错误,比如在我的生产环境的localsettings.py、wsgi/cgi,或者在/etc/sites-available里的apache站点文件中。
- 数据库差异。我使用South来进行数据库迁移,但在PostgreSQL上迁移时遇到了一些细微的问题,而在sqlite上却很顺利。
- 静态文件托管,因为我在开发时使用Django服务器,所以有点偷懒。
- 权限问题,包括文件系统和数据库中的权限。
- 虽然不常见,但有可能出现网络问题,导致我无法获取依赖项,无论是在PyPi还是其他第三方网站上。
我缓解这些问题的方法:
- 在生产和开发中使用相同的数据库(在你的情况下,MySQL到处都用)。
- 我发现有一个“测试”环境非常有用,它尽可能地模拟生产环境(可以使用低配置的硬件,甚至是在同一台机器上)。这样,如果在这个“类似生产”的环境中出现问题,我可以在不影响生产服务器的情况下解决它们。
- 将所有操作脚本化,以便可以重复部署。我使用fabric,但zc.buildout或Paver也可以。这些工具可以减少部署时的打字错误,并缩短应用程序的部署时间。
- 使用版本控制工具(如mercurial、git、subversion)和模式迁移工具(像South),这样如果在生产环境部署时出现问题,你可以撤回更改,让生产环境继续使用旧代码和旧数据库模式。
- 我还没有设置“egg代理”,但我在考虑这样做,以避免下载依赖时出现问题。
- 我发现pip的依赖冻结功能很有用,以防在我最初下载库后发生了不兼容的新变化。
- 使用像Windmill或Selenium这样的网页测试框架,在我的“测试”环境中测试我的应用,这样我可以快速获得系统的广泛测试覆盖。