向后迁移从Django 1.4到Django 1.3

有时候,我那愚蠢,鲁莽和胆大妄为的节目编剧让我陷入了一些危险的地方:

我已经用sqlite3开始了一个Django 1.4应用程序,然后转移到了mysql,在那里没什么大不了的。 但后来我意识到我的模型与NoSql模型非常吻合,并决定尝试使用django-nonrel的MongoDB,这是Django 1.3的一个分支,支持非关系数据库。 1.4版本尚未准备好使用。

所以,我分支了我的回购,创建了我的virtualenv和pipinstalled django-nonrel,但是当我运行./manage.py shell我收到了此消息

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 429, in execute_from_command_line
    utility.execute()
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 252, in fetch_command
    app_name = get_commands()[subcommand]
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/core/management/__init__.py", line 101, in get_commands
    apps = settings.INSTALLED_APPS
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/utils/functional.py", line 276, in __getattr__
    self._setup()
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
  File "/Users/marcoslhc/Documents/Proyectos/fontcase/mongoBE/lib/python2.7/site-packages/django/conf/__init__.py", line 139, in __init__
    logging_config_func(self.LOGGING)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 776, in dictConfig
    dictConfigClass(config).configure()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 562, in configure
    'filter %r: %s' % (name, e))
ValueError: Unable to configure filter 'require_debug_false': Cannot resolve 'django.utils.log.RequireDebugFalse': No module named RequireDebugFalse

RequireDebugFalse在Django 1.4中是新增的(参见这里和这里),我想1.4中的其他一些基础魔术新功能在这个新安装中都不起作用。 我想知道是否可以将我的应用程序迁移回Django 1.3,而无需执行django-admin.py startprojectdjango-admin.py startapp


你可以做到这一点,尽管你可能想要敞开大门继续前进。

我过去处理这个问题的方式是,如果可能的话,不要对代码进行大规模的修改。 相反,做你已经做的事 - 运行代码并等待它炸毁。 确定问题的根源,然后执行以下操作之一:

  • 创建一个提供所需功能的存根(或者至少安静地不做任何事情),
  • 将功能支持移植到您自己的1.3或更高版本的个人副本上
  • 将功能修补到未修改的1.3上。 (我的建议)
  • 除非你完全体会到1.4中的一些独特的新功能,否则你会惊讶地发现你能够多快创建一个可用的环境。 我有一个项目,其中猴子补丁文件只有大约100行,用于将旧版本的十几个功能进行翻新。


    如果您的项目中没有使用django 1.4的东西,您可以创建一个1.3项目并从那里复制日志记录设置。 那你应该没问题。

    链接地址: http://www.djcxy.com/p/71975.html

    上一篇: Backwards migration from Django 1.4 to Django 1.3

    下一篇: mongodb vs Mongokit vs pymongo native