В одночасье django перестал работать, возможно, из-за автоматического обновления пакета на сервере. Его сценарий wsgi теперь не загружается в производственной среде, но сервер разработки работает нормально. Что может вызвать следующую ошибку?
mod_wsgi (pid=27634): Target WSGI script '/var/www/.../wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=27634): Exception occurred processing WSGI script '/var/www/.../wsgi.py'.
Traceback (most recent call last):
File "/var/www/.../wsgi.py", line 13, in <module>
from django.core.wsgi import get_wsgi_application
File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 2, in <module>
from django.core.handlers.wsgi import WSGIHandler
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 10, in <module>
from django import http
File "/usr/local/lib/python2.7/dist-packages/django/http/__init__.py", line 5, in <module>
from django.http.response import (
File "/usr/local/lib/python2.7/dist-packages/django/http/response.py", line 13, in <module>
from django.core.serializers.json import DjangoJSONEncoder
File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/__init__.py", line 23, in <module>
from django.core.serializers.base import SerializerDoesNotExist
File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/base.py", line 4, in <module>
from django.db import models
File "/usr/local/lib/python2.7/dist-packages/django/db/models/__init__.py", line 4, in <module>
from django.db.models import signals # NOQA
ImportError: cannot import name signals
Файл wsgi.py выглядит следующим образом:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "....settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Это работало 24 часа назад и перестало работать - я пробовал django 1.10 и 1.10.3, но оба проявляют те же симптомы. apache 2.4.18, python 2.7.12.
Файл /usr/local/lib/python2.7/dist-packages/django/db/models/signals.py существует, поэтому в принципе ничего не должно останавливать импорт.
Оказывается, был файл, который не мог прочитать веб-сервер, и более ранняя строка в журнале ошибок идентифицировала этот файл.
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/protobuf-3.1.0.post1-py2.7.egg/EGG-INFO/namespace_packages.txt'
Решил проблему с помощью:
chmod -R o+r /usr/local/lib/python2.7/dist-packages
Оставляем этот вопрос на тот случай, если кто-то столкнется с той же проблемой.