尝试让 Pyramid 在 Apache + mod_wsgi 下运行,但失败

2023-12-11

我已经安装了 mod_wsgi 并运行 Apache2。我已经确认 mod_wsgi 实际上可以通过以下方式工作this.

当我尝试运行 Pyramid 时,问题就出现了。我收到内部服务器错误,并且我的 Apache 错误日志包含异常:

AssertionError: The EvalException middleware is not usable in a multi-process environment

这是我的虚拟主机:

<VirtualHost *:80>
    ServerName  pyramidtest.dev
    DocumentRoot    /srv/pyramidtest.dev/www/
    AssignUserID    pyramidtest nogroup
    WSGIScriptAlias / /srv/pyramidtest.dev/pyramid/load.wsgi
</VirtualHost>

这是我的load.wsgi:

import site
site.addsitedir('/opt/pyramid/lib/python2.7/site-packages')

from pyramid.paster import get_app

application = get_app('/srv/pyramidtest.dev/pyramid/test/development.ini', 'main')

mod_wsgi 编译使用/opt/python2.7作为Python解释器,但我在virtualenv下运行Pyramid/opt/pyramid- 这就是为什么我有site.addsitedir()在我的 load.wsgi 中。

而且,如果需要的话,apache2 -V:

Server version: Apache/2.2.9 (Debian)
Server built:   Dec 30 2010 11:50:24
Server's Module Magic Number: 20051115:15
Server loaded:  APR 1.2.12, APR-Util 1.2.12
Compiled using: APR 1.2.12, APR-Util 1.2.12
Architecture:   32-bit
Server MPM:     ITK
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/experimental/itk"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT=""
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"

我错过了什么...?


您正在使用 EvalException 中间件(从错误消息中可以看出)。该错误的解决方案实际上包含在调试技术 wikimod_wsgi 的。

基本上,由于中间件允许对应用程序进行基于浏览器的交互式调试,因此所有请求都需要发送到同一进程;但是,您在嵌入模式下运行 mod_wsgi,默认情况下可以创建许多进程。

来自维基:

[...]如果你想使用这个 基于浏览器的交互式调试器,如果 以嵌入式方式运行您的应用程序 mod_wsgi 模式,您将需要 配置 Apache,使其仅 启动一个子进程来处理 请求并且它永远不会创建任何 额外的过程。阿帕奇人 所需的配置指令 实现这一点的方法如下。

StartServers 1  
ServerLimit 1

切换到守护进程模式(默认为单进程)也可以解决此问题,建议在嵌入式模式下运行。以下是 Apache 指令:

WSGIDaemonProcess pyramidtest.dev display-name=%{GROUP}
WSGIProcessGroup pyramidtest.dev

mod_wsgi还可以为您添加Python路径。如果使用嵌入模式,您可以使用:

WSGIPythonPath /opt/pyramid/lib/python2.7/site-packages

如果使用守护进程模式,请使用 WSGIDaemonProcess 指令的“python-path”选项。

WSGIDaemonProcess pyramidtest.dev display-name=%{GROUP} python-path=/opt/pyramid/lib/python2.7/site-packages
WSGIProcessGroup pyramidtest.dev
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试让 Pyramid 在 Apache + mod_wsgi 下运行,但失败 的相关文章

随机推荐

  • JavaScript 中的可变变量

    据我所知 这个功能在PHP中已经存在 让我们看一下下面的 php 代码 color red color dark 功能描述 有时拥有可变的变量名会很方便 即 可以动态设置和使用的变量名 变量变量采用变量的值并将其视为变量的名称 在上面的例子
  • Matplotlib 表面颜色不纯色

    在 Matplotlib 中绘制平面时 我没有得到纯色 我得到以下带有多种红色阴影的结果 我在 Python 3 5 2 中使用 Matplotlib 版本 1 5 1 我正在运行的代码如下 import numpy as np from
  • 无法使用 PHP $_POST[] 变量检索 jQuery 序列化表单数据

    使用 Ajax jQuery 函数 post 我正在发送 jQueryserialized 将数据表单数据发送到 PHP 函数 该函数成功接收它 POST 但又个性 POST form field 变量为空 在我的 PHP 函数中 prin
  • 使用queue.PriorityQueue,不关心比较

    我正在尝试使用queue PriorityQueue在 Python 3 6 中 我想存储具有给定优先级的对象 但如果两个对象具有相同的优先级 我不介意PriorityQueue get返回任一 换句话说 我的对象不能在整数上进行比较 允许
  • 有没有办法连续将 Console.Write 的结果镜像到集合(数组、列表等)?

    我有一个控制台程序 我想不断地将 Console Write 的结果镜像到一个集合中 我可以实时查看该集合的尾部 该集合可以是数组 列表等 我想我必须使用某种事件处理程序 我不介意被指向第三方库的方向 例如NLog Update 我需要在内
  • 在表视图中不显示数据 - 当 api 没有返回数据时

    我有大约 15 个集合视图单元格 当用户单击每个单元格时 相应的单元格数据将显示在下一个屏幕表格视图中 但是 某些单元格没有任何数据 在这种情况下 我需要在表格视图中显示 没有数据 如何表明 这是我的代码 这些是我的表视图中的委托方法 ar
  • node-gyp 构建错误 Windows x64:“致命错误 LNK1181:无法打开输入文件 'kernel32.lib'”

    以下是我迄今为止在 x64 操作系统上所做的操作 安装Python v2 7 特别是2 7 6 并将其添加到系统路径 C Python27 安装了 MS VS C 2010 Express 版本 我已经有 VS 2012 但没有 C 组件
  • Zend 中的分页

    朋友们 我想在 Zend Framework 中创建分页 我是采埃孚的新手 下面给出了index phtml table tr th Name th th Quantity th th nbsp th tr tr td td td td t
  • Windows 中 main() 的返回值

    在Linux中 main函数的返回值存储在 中 可以使用echo 显示 Windows 中有类似的东西吗 echo ERRORLEVEL
  • 缓存在 Identity Server 4 中似乎不起作用

    我正在尝试使用他们的 IS4 实现添加缓存Caching方法 但是 我的实现似乎对登录速度或每次登录访问数据库的查询数量没有任何影响 我希望缓存能够减少这两者 我为实现缓存所做的更改如下 在 Startup cs 配置服务中添加了以下内容
  • 如何在Weblogic中启用JMX通过WLST设置任何属性

    我收到以下错误 java lang RuntimeException java lang RuntimeException 请求的 属性未通过 JMX 公开 setEnabled 我该如何解决这个问题 这是我在 WLST Weblogic
  • .NET 中的 WebClient 和 HTTPWebRequest 类有什么区别?

    两者之间有什么区别WebClient和HttpWebRequest NET 中的类 他们都做非常相似的事情 事实上 为什么它们没有合并到一个类中 太多的方法 变量等可能是一个原因 但 NET 中还有其他类打破了这一规则 Thanks Web
  • 浮点数集

    所以我想创建一组浮点数 其中两个数字在给定一定容差的情况下被视为相等 例如 如果我有一组 a set 1 2 3 如果我添加元素 1 00001 且容差为 1e 4 则结果集应该是 1 2 3 and not 1 1 00001 2 3 我
  • ld:找不到架构 x86_64 的符号[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我正在使用 C 学习原理和实践 并且在链接到正确的架构
  • 记录 setLevel 被忽略

    下面的代码是从文档中复制的 我应该能够看到所有信息日志 但我不这么认为 即使我已将 setLevel 设置为 INFO 我也只能看到警告及以上内容 为什么会发生这种情况 foo py import logging logger loggin
  • 不应用Boost Spirit解析规则

    我在这里看不到我的错误 这个规则可以解析一些东西 但最后两个样本不能 有人可以给我一个提示吗 目标是一个能够识别成员属性访问和成员函数调用的解析器 也以某种方式被束缚 a a para x a x a para x a para g par
  • 没有使用用于通知 UIKeyboardWillShowNotification 和 UIKeyboardWillHideNotification 的 Objective-C 选择器声明的方法

    最近更新 Xcode 后 这段曾经有效的代码不再有效 大多数选择器 都有自动更正功能 但以下代码除外 override func viewDidLoad super viewDidLoad NSNotificationCenter defa
  • 防止 NewtonSoft Json 添加尾随 0 [重复]

    这个问题在这里已经有答案了 我遇到了一个意想不到的问题NewtonSoft Json图书馆 看起来它会向没有小数部分的十进制值添加尾随 0 JsonConvert SerializeObject 1m 将返回以下字符串 1 0 虽然在很多情
  • Jenkins 插件 - 环境变量

    我正在使用 Jenkins 和 Testswarm 以及这个plugin 分叉源 我想获得 Testswarm 的 作业名称 其中包含 Jenkins 作业名称 内部版本号和 svn 修订号 将 JOB NAME 放入配置字段没有帮助 该变
  • 尝试让 Pyramid 在 Apache + mod_wsgi 下运行,但失败

    我已经安装了 mod wsgi 并运行 Apache2 我已经确认 mod wsgi 实际上可以通过以下方式工作this 当我尝试运行 Pyramid 时 问题就出现了 我收到内部服务器错误 并且我的 Apache 错误日志包含异常 Ass