将Django应用迁移到Google App Engine?

9 投票
4 回答
1888 浏览
提问于 2025-04-15 12:52

我正在开发一个网页应用,考虑使用Django、Google App Engine以及其他几个选项。我想知道,如果我先在专用服务器上开发一个完整的Django应用,之后再想把它迁移到Google App Engine,会有什么样的“代价”。

我对Google的数据存储有基本了解,所以请假设我会为我的“独立”Django应用选择一个列式数据库,而不是关系型数据库,这样数据库的结构大部分可以保持不变,不会成为一个主要问题。

另外,请假设我的应用不会存储大量数据,所以不需要迁移几十个GB的数据。我主要关心的是对代码和软件架构的影响。

谢谢

4 个回答

2

听起来你已经意识到在构建或迁移你的应用时一个主要的限制——就是AppEngine不支持Django的ORM。

要记住,这不仅仅影响你自己写的代码,还限制了你使用很多现有Django代码的能力。这包括其他应用程序(比如内置的管理和认证应用)以及基于ORM的功能,比如通用视图

2

基本上,如果你使用一些库,比如PIL、urllib2等,你需要修改数据模型的基础类和一些API。

如果你的目标是使用应用引擎,我建议你使用应用引擎的助手工具,链接在这里:http://code.google.com/appengine/articles/appengine_helper_for_django.html。这个工具可以让你在自己的服务器上用文件数据库运行,然后再无缝地推送到应用引擎上。

8

大部分(可能是全部)Django都可以在Google App Engine(GAE)上使用,所以你主要的任务就是避免在设计时依赖那些在GAE上不可用的Django或Python标准库的东西。

你已经注意到了一个明显的区别,就是数据库,所以我假设你对此已经有了了解。另一个区别是与Google账户的关联,这意味着如果你愿意,可以通过app.yaml文件进行相当多的访问控制,而不是在代码中处理。不过,你并不一定要使用这些功能,所以如果你不打算在切换到GAE时也切换到Google账户,那也没问题。

我认为标准库的差异主要可以从GAE没有输入输出(I/O)和没有C语言加速库(除非特别说明)这一点推断出来。根据我的经验,通常我期待的功能都是可以找到的。我不太了解Django,也没有在GAE上使用过它(除了模板),所以对此我无法发表意见。

就我个人而言,我可能不会先针对LAMP(这里的P指的是Django)进行开发,然后再打算迁移到GAE。我会同时为这两者开发,并尽量确保差异仅限于最上层(配置)和最底层(数据模型)。GAE版本不一定要完美,只要你知道如何在需要时让它变得完美就可以了。

虽然不能保证这样做比先写代码再移植更快,但我猜通常会更快。发现任何差异的最简单方法是直接运行代码,而不是依赖GAE文档中没有遗漏的内容,这样你可能会避免一些需要重新处理的错误。Python SDK与真实的App Engine相差不大,所以你大部分测试可以在本地运行。

当然,如果你最终决定不进行移植,那你就做了不必要的工作,所以你需要考虑这种情况发生的可能性,以及如果不需要GAE开发,你是否会觉得这段时间浪费了。

撰写回答