我正在Windows,SQLite和django dev服务器上开发一个django应用程序.我已经将它部署到运行Linux,Apache,FastCgi,MySQL的主机服务器上.
不幸的是,我在prod服务器上返回了一个错误,而dev机器上的一切正常.我已经向我的提供商询问了预生产解决方案,以便能够调试和理解问题.
无论如何,根据你的说法,将django应用程序从dev移动到prod时可能发生的最可能的错误是什么?
最好
更新:我认为预先制定是解决此类问题的最佳方法.但我想建立一个清单,列出在投入生产之前必须完成的工作.感谢我收到的非常有价值的答案,直到现在:)
更新:仅供参考,我已经实现了shanyu建议的preprod服务器和电子邮件通知,我可以看到错误来自我在这个新版本上使用的smart_if模板标签.模板标签的任何技巧?
更新:我想我已经修复了我认为由Filezilla FTP发送引起的pb.我正在使用"替换为更新"选项,我猜这会导致一些意想不到的结果.使用"全部替换"选项可以解决问题.但是,我有机会了解有关部署的更多信息.Thansk为你的答案.
我通常遇到的问题包括:
错误配置的产品设置,无论是在我的生产localsettings.py,wsgi/cgi,还是在/ etc/sites-available中的apache站点文件
数据库差异.我使用South进行迁移,并且当它在sqlite中顺利运行时在PostgreSQL上执行迁移时遇到了一些微妙的问题.
静态文件托管,因为我作弊并在开发中使用Django服务器
权限,包括文件系统和数据库中的权限
很少但可能的网络问题阻止我获取我的依赖关系,无论是在PyPi还是某些第三方网站上
我已经减轻了这些问题的方法:
在生产和开发中使用相同的数据库(在您的情况下,MySQL无处不在)
我发现拥有一个"测试"环境非常有用,它可以以各种可能的方式模仿生产(它可以在低端硬件上,甚至可以在同一台机器上).这样,如果在这种"类似生产"的环境中存在任何问题,我可以在不使我的生产服务器脱机的情况下解决它们.
编写可重复部署的所有内容.我使用fabric,但是zc.buildout或Paver也可以使用.这些工具有助于在部署时减少拼写错误,并缩短部署应用程序的时间.
使用版本控制(mercurial,git,subversion)和模式迁移工具(如South),因此如果在部署到生产时出现问题,您可以撤消更改并允许生产在旧代码上运行使用旧的数据库架构.
我还没有设置" egg proxy ",但我正在考虑它,以避免在下载依赖项时出现问题.
我发现pip的冻结依赖是有用的,以防自从我最初下载它以来对库发生了新的,不兼容的更改
使用像Windmill或Selenium这样的Web测试框架在我的"测试"环境中测试我的应用程序,这样我就可以非常快速地获得大量的系统测试覆盖率.