mod_wsgi error – class .__ dict__ недоступен в ограниченном режиме

Это на самом деле сильно заставило нашу задницу на нашем производственном сервере. Мы видели это иногда (по 1 запросу в неделю). Тогда мы выяснили, что это из-за того, что mod_wsgi делает некоторые фанки в некоторых конфигурациях. Поскольку мы не могли отследить причину ошибки, мы решили, что это не требует мгновенного внимания.

Однако сегодня на одном из наших производственных серверов это действительно произошло для 10% всех запросов сервера; то есть 10% всех запросов сервера не удалось с этой же ошибкой:

mod_wsgi (pid=1718): Target WSGI script '/installation/dir/our-program/prod-dispatch.wsgi' cannot be loaded as Python module. mod_wsgi (pid=1718): Exception occurred processing WSGI script '/installation/dir/our-program/prod-dispatch.wsgi'. Traceback (most recent call last): File "/installation/dir/our-program/prod-dispatch.wsgi", line 7, in <module> from pyramid.paster import get_app File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/paster.py", line 12, in <module> from pyramid.scripting import prepare File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/scripting.py", line 1, in <module> from pyramid.config import global_registries File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/config/__init__.py", line 61, in <module> from pyramid.config.assets import AssetsConfiguratorMixin File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/config/assets.py", line 83, in <module> @implementer(IPackageOverrides) File "/installation/dir/venv/local/lib/python2.7/site-packages/zope.interface-3.8.0-py2.7-linux-x86_64.egg/zope/interface/declarations.py", line 480, in __ classImplements(ob, *self.interfaces) File "/installation/dir/venv/local/lib/python2.7/site-packages/zope.interface-3.8.0-py2.7-linux-x86_64.egg/zope/interface/declarations.py", line 445, in cl spec = implementedBy(cls) File "/installation/dir/venv/local/lib/python2.7/site-packages/zope.interface-3.8.0-py2.7-linux-x86_64.egg/zope/interface/declarations.py", line 285, in im spec = cls.__dict__.get('__implemented__') RuntimeError: class.__dict__ not accessible in restricted mode 

Ubuntu Precise, 64 бит, с последними версиями Apache, mod_wsgi, Python 2.7, с использованием mpm_worker + mod_wsgi в режиме демона . Это единственная программа, запущенная на сервере, и в конфиге есть только один интерпретатор wsgi. Это из-за того, что mpm_worker порождает новые потоки или что? Что еще более важно – как мы это исправим.

У нас есть следующее, чтобы разделить запросы на 4 процесса демона на основе cookie.

 WSGIPythonOptimize 1 WSGIDaemonProcess sticky01 processes=1 threads=16 display-name=%{GROUP} WSGIDaemonProcess sticky02 processes=1 threads=16 display-name=%{GROUP} WSGIDaemonProcess sticky03 processes=1 threads=16 display-name=%{GROUP} WSGIDaemonProcess sticky04 processes=1 threads=16 display-name=%{GROUP} <VirtualHost *:81> ... WSGIRestrictProcess sticky01 sticky02 sticky03 sticky04 WSGIProcessGroup %{ENV:PROCESS} ... WSGIScriptAlias / /installation/dir/our-program/prod-dispatch.wsgi </VirtualHost> 

One Solution collect form web for “mod_wsgi error – class .__ dict__ недоступен в ограниченном режиме”

Уже давно известно, что несколько субинтерпреттеров плохо воспроизводятся вдоль расширений C. Однако я не понял, что настройки по умолчанию очень неудачны. Вики WikiWikiWikiWiki ясно заявляет, что значение по умолчанию для директивы WSGIApplicationGroup равно% {RESOURCE}, действие которой должно быть таким

Имя группы приложений будет установлено на имя и порт сервера как для переменной% {SERVER}, к которой добавляется значение переменной среды WSGI SCRIPT_NAME, разделенное символом разделителя файлов.

Это означает, что для каждого заголовка Host: когда-либо встречающегося при доступе к серверу, mod_wsgi любезно порождает новый субинтерпретертер, для которого затем загружаются расширения C.

Я неосознанно вызвал ошибку, обратившись к localhost.invalid: 81 с браузером ссылок на этом локальном сервере, в результате чего 1 из наших 4 WSGIDaemonProcesses завершился неудачей для всех будущих входящих запросов.

Суммарное суммирование: всегда при использовании mod_wsgi с пирамидой или любой другой структурой, использующей C-расширения, убедитесь, что WSGIApplicationGroup всегда установлена ​​в% {GLOBAL} . Другими словами, результат использования настроек по умолчанию заставит вас стрелять в ногу, после чего вы, возможно, захотите застрелить себя и в голове.

  • Управление продолжительностью жизни токена с помощью SimpleCookie в Python
  • Профилирование скриптов Python на Mod_wsgi
  • Как получить доступ к запросу в Flask MIddleware
  • Привет, мир в mod_wsgi
  • Я не могу подключиться к серверу https waitress wsgi
  • Обслуживание статических файлов с помощью WSGI и Python 3
  • В Django, как разрешить операторам печати работать с Apache WSGI?
  • Как вы развертываете свое приложение WSGI? (и почему это лучший способ)
  • Python - лучший язык программирования в мире.