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

5
我正在Windows上开发一个django应用程序,使用SQLite和django开发服务器。我已将其部署到运行Linux、Apache、FastCgi和MySQL的主机服务器上。不幸的是,在生产环境中,服务器返回了一个错误,而在开发机器上一切正常。我已经向我的提供商请求了一个预生产解决方案,以便能够调试和理解问题。无论如何,当将django应用程序从开发环境移动到生产环境时,您认为最有可能发生什么错误?更新:我认为预生产是解决这种问题的最佳方法。但是我想建立一个清单,在投入生产之前必须完成哪些工作。感谢迄今为止收到的非常有价值的答案 :)更新:FYI,我已经按照shanyu的建议实施了preprod服务器和电子邮件通知,并且我可以看到错误来自我在这个新版本中使用的smart_if templatetag。关于模板标签有什么技巧吗?
更新:我认为我已经解决了问题,这个问题似乎是由Filezilla FTP发送引起的。我使用了“仅替换较新文件”的选项,我想这可能会导致一些意外的结果。使用“全部替换”选项解决了这个问题。然而,这是一个让我学习更多部署知识的机会。感谢你们的回答。

1
服务器返回的“错误”并不是很有帮助。您能具体说明一下吗? - Ned Deily
我不记得具体是什么了,也无法再现,因为我已经恢复了之前的版本,但它是一个非常短的消息,大概是说“内部错误”,没有关于错误的详细信息。 - luc
3个回答

7

我通常遇到的问题包括:

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

我缓解这些问题的方法:

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

非常有趣的答案。我会仔细看看。 - luc

1
关于您的情况,我可以想到两个简单的方法可能会对您有所帮助:
  1. 您可以启用Django在异常发生时发送消息并提供有关它们的详细信息。请查看此处了解详情。
  2. 如果您在生产服务器上设置一个测试环境(例如test.example.com),那么在部署应用程序之前,您将更好地了解事情是否会顺利进行。

谢谢这两个提示。我不知道#1是可能的。我同意预生产环境是我需要的。 - luc
我已经实现了它们两个,它们是非常有用的工具。请查看我的更新。 - luc
很高兴能够帮助。我建议您解决这个问题,并针对智能标签问题提出另一个问题,因为它与主题无关。 - shanyu

0

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

将Django定位于现实世界中(PyCon 2009):

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

第1至3部分

非常好的介绍,如何为部署设计您的应用程序,特别是为了重用和重新部署。

敬礼。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接