如何让旧的Django项目像往常一样恢复运行?

时间:2016-02-14 23:30:31

标签: python django django-1.9 django-mysql

我有一个旧的Django项目,我还没有跟上,现在我想对当前版本的Django和相关软件进行必要的修改。我不知道该怎么做当前的错误;在我看来它在django.core伞下没有东西,但我的Django 1.9.2安装是最新的:

[2016-02-14 17:23:10 +0000] [4605] [ERROR] Exception in worker process:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 122, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 130, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/djangoapp.py", line 141, in load
    mod = util.import_module("gunicorn.app.django_wsgi")
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/django_wsgi.py", line 21, in 
    from django.core.management.validation import get_validation_errors
ImportError: No module named validation
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 515, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 122, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 130, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/djangoapp.py", line 141, in load
    mod = util.import_module("gunicorn.app.django_wsgi")
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/django_wsgi.py", line 21, in 
    from django.core.management.validation import get_validation_errors
ImportError: No module named validation
[2016-02-14 17:23:10 +0000] [4605] [INFO] Worker exiting (pid: 4605)
[2016-02-14 17:23:11 +0000] [4597] [INFO] Shutting down: Master
[2016-02-14 17:23:11 +0000] [4597] [INFO] Reason: Worker failed to boot.
root@localhost:~/unixytalk# pip install Django==1.9.2
Requirement already satisfied (use --upgrade to upgrade): Django==1.9.2 in /usr/local/lib/python2.7/dist-packages

如何将项目移植到较新的Django?例如,我可以提供(或告诉它提供)django.core.management.validation?

如果我可以包含另一个古老的问题,那么取代" python manage.py syncdb"将数据库初始化为应用程序可以处理的项目?

- UPDATE -

有一些我正在离开这张纸条的想法...

我发布了一个屏幕的输出,其中Gunicorn无法正常工作,通过django.core.management.validation导入,显然是由Gunicorn的进程放置的,而且在任何意义上都不是我直接与该模块互动的主动权。 (正如我所说,我试图让旧系统使用更新的代码。至少在这个项目中,这在任何意义上都不包括使用django.core.management.validation的主动权。)

不要在它上面写太多,但是响应的人与我的屏幕输出相关联,因为 TL; DR

那不是我为 TL; DR 设定步伐的我;是帮助我的人。

根据"上的渲染字符的复制粘贴指标,选择全部并复制," TL; DR 是2412个字符。

大量发行说明,即53714个字符,符合 TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL ; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR TL; DR 仅在其上一部分中让人联想到Jakob Nielsen's article on why user education is not the answer to security issues和Nix包装系统,它旨在让所有东西都保留其所需的包装系统版本,而不是让所有东西都适合当前安装的任何版本的Procrustean床。

这有点偏离我原来的问题,除了它不是。我的原始问题的目的是,"我如何轻微地喷洒像素灰尘并恢复一个相当简单的旧Django项目?"现在事情看起来更像是"事实上,我不能再运行我留下的工作项目,这是冰山一角。鉴于我是一个体面的Django开发人员,但不是一个超级专注的Django专家,而且我使用了许多技术,bitrot看起来像是很多痛苦的来源。"

确定;虽然我怀疑在这里发现了一个程序员帖子,但还是有足够的抱怨。

1 个答案:

答案 0 :(得分:1)

1)要移植到较新版本的Django,我会阅读从您开始使用的版本到您将要访问的版本的每组发行说明。绝对阅读release notes for Django 1.9,特别注意阅读底部附近已弃用,向后不兼容和删除的功能。

2)要检查是否提供了django.core.management.validation,您可以围绕导入执行try/except

try:
    from django.core.management.validation import get_validation_errors
    validation_errors_imported = True
except ImportError:
    get_validation_errors = None
    validation_errors_imported = False

3)最后,您将不再运行python manage.py syncdb。截至Django 1.7,它是python manage.py migrate。祝你好运!