【问题标题】:How to get the version of wsgi_mod which apache used?如何获取 apache 使用的 wsgi_mod 版本?
【发布时间】:2013-04-12 09:52:32
【问题描述】:

我使用的是 ubuntu 12.041 并通过 apt-get 安装了 apache。

我不知道我使用的是什么版本的 mod_wsgi,尽管我在谷歌上搜索过。 我发现你可以使用 apachctl 重新启动你的 apache,你会得到 类似于“Apache/2.2.2 (Unix) mod_wsgi/1.0 Python/2.3 已配置”。但 这没有发生在我身上。

有什么方法可以知道我使用的是什么版本?谢谢。

【问题讨论】:

    标签: apache mod-wsgi wsgi


    【解决方案1】:

    如果您重新启动 Apache 并检查日志:

    sudo apachectl -k restart
    tail -n 5 /var/log/apache2/error.log
    

    ...你应该看到版本:

    [2015 年 6 月 5 日星期五 15:13:46.546029] [mpm_prefork:notice] [pid 2245] AH00163:Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 mod_wsgi/3.4 Python/3.4.0 已配置——恢复正常操作

    【讨论】:

    • 我相信如果 Apache 以某种方式配置,该行中的信息可能会被部分排除。所以不一定要依赖mod_wsgi和Python出现的信息。
    • 无需重启即可查看已有日志:grep mod_wsgi /var/log/apache2/error.log
    【解决方案2】:

    在您的 WSGI 应用程序中,查看 WSGI 环境字典中 mod_wsgi.version 的值。在 mod_wsgi(不是命令行 Python)下运行的 WSGI 应用程序中的那个或 import mod_wsgi 模块,并从该模块中打印出 mod_wsgi.version。

    【讨论】:

    • 一些...代码?还是文件夹?或指向使这成为一个简单的 1,2,3 过程的东西的指针将非常有用。
    • 只需将import mod_wsgi 和logsomewhere(mod_wsgi.version) 添加到您的代码中。如前所述,您需要在 wsgi/apache 中运行代码。不在 Django Runserver 内部。或者您将modwsgi.version 添加到模板上下文中,并将其显示在您的应用程序的某些系统信息页面上。
    【解决方案3】:

    我用这个

    dpkg -l | grep wsgi
    

    我不知道它在做什么,但它是一个版本?

    顺便说一句,我的版本可能不对 -

    libapache2-mod-wsgi  (on ubuntu 10.04)
    

    不兼容python 3.x。我怎么知道这是一个谜——一些随机的网络论坛。此外,您实际上如何确定 libapache2 版本中的版本是 超出 我的理解。

    但是,啊,上面那个unix脚本会为你得到版本。在那之后你就靠自己了,水手。

    【讨论】:

    • 有关 mod_wsgi 发行版打包版本的更多详细信息,请从我的潦草笔记中获取,您可以运行 apt-cache policy libapache2-mod-wsgi。 Python 3 版本将在 Ubuntu 系统上将“py3”作为包名的一部分。
    【解决方案4】:

    移动到 mod_wsgi.so 所在的 apache 模块目录。

    运行以下命令。

    $ strings mod_wsgi.so | grep -w -A 1 "wsgi_init"
    wsgi_init
    4.5.7   
    

    注意 可能需要使用-A,在出现wsgi_init 后显示多于1 行。例如对于 mod_wsgi 版本 2.7.5,您需要 -A 2 才能看到版本号:

    $ strings mod_wsgi.so | grep -w -A 2 "wsgi_init"
    wsgi_init
    mod_wsgi/%s
    2.7.5
    

    【讨论】:

    • 我想我正在使用mod_wsgi for Python 2.7 或 3.4.3 (试图弄清楚)并按照你的命令对我没有帮助。我得到了这两行输出:wsgi_init 和 mod_wsgi/%s。输出中没有前导或尾随空格,只有换行符。
    • 我遇到了同样的问题。我将-A 1 更改为-A 5 以在wsgi_init 打印后获得更多行。我得到了wsgi_init mod_wsgi/%s 2.7.5 %s.%d.%d.%d.sock %s.%d.%d.%d.lock sysvsem
    【解决方案5】:

    一个附带问题是关于 mod_wsgi 使用的 Python 版本。为此,只需使用 ldd 检查 mod_wsgi.so 模块:

    ➜  / cd usr/lib/apache2/modules 
    ➜  modules ldd mod_wsgi.so
            linux-vdso.so.1 =>  (0x00007ffcaabf3000)
            libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f4e29c62000)
            libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4e29a45000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4e2967b000)
            libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f4e29461000)
            libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4e2925d000)
            libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f4e2905a000)
            libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4e28d51000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f4e2a423000)
    ➜  modules 
    

    就我而言,它显然是用python2.7编译的。

    【讨论】:

      【解决方案6】:

      这已经很老了,但我没有看到我找到的答案:

      yum list installed '*mod_wsgi*'
      

      或者更好

      yum list '*mod_wsgi*'
      

      查看您已安装的内容以及可用的(可能)更高版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 2018-06-26
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多