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} . Другими словами, результат использования настроек по умолчанию заставит вас стрелять в ногу, после чего вы, возможно, захотите застрелить себя и в голове.

  • Flask hello world использует apache и mod_wsgi показывает файлы только в веб-канале
  • 104, «Ошибка сброса соединения с помощью одноранговой сети», или Когда закрытие сокета приводит к RST, а не FIN?
  • который является минималистичным сервером разработки wsgi python с поддержкой перезагрузки кода?
  • Флажок - 500 Внутренняя ошибка сервера
  • Настройка Python с WSGI на Apache для каталога
  • может WSGI получить полный URL, а не просто: environ ? .. если так .. Mod_Rewrite альтернатива?
  • Как отлаживать / регистрировать приложение wsgi python?
  • Бутылка + Apache + WSGI + сеансы
  • Простая сеть UDP Слушайте в колбе или пирамиде
  • как указать расширенный ascii (т.е. диапазон (256)) в строке спецификатора кодирования магии питона?
  • Как cgi.FieldStorage хранит файлы?
  • Python - лучший язык программирования в мире.