【问题标题】:Mod_wsgi pylons (ckan) installation not workingMod_wsgi pylons (ckan) 安装不工作
【发布时间】:2011-07-26 00:58:57
【问题描述】:

我正在根据以下说明设置 CKAN,这是一个 pylons 应用程序: http://packages.python.org/ckan/deployment.html

但是当我使用 IP 或主机名指向服务器(尚未设置 DNS)时,我只看到 apache 的问候页面,提示 ckan 应用程序没有被加载。

这是我的 mod_wsgi 脚本:

import os
instance_dir = '/home/flavio/var/srvc/ckan.emap.fgv.br'
config_file = 'ckan.emap.fgv.br.ini'
pyenv_bin_dir = os.path.join(instance_dir, 'pyenv', 'bin')
activate_this = os.path.join(pyenv_bin_dir, 'activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
from paste.deploy import loadapp
config_filepath = os.path.join(instance_dir, config_file)
from paste.script.util.logging_config import fileConfig
fileConfig(config_filepath)
application = loadapp('config:%s' % config_filepath)

这是我的虚拟主机配置:

<VirtualHost *:80>

ServerName dck093

ServerAlias dck093

WSGIScriptAlias / /home/flavio/var/srvc/ckan.emap.fgv.br/pyenv/bin/ckan.emap.fgv.br.py
# pass authorization info on (needed for rest api)
WSGIPassAuthorization On

ErrorLog /var/log/apache2/ckan.emap.fgv.br.error.log
CustomLog /var/log/apache2/ckan.emap.fgv.br.custom.log combined
<Directory /home/flavio/var/srvc/ckan.emap.fgv.br/pyenv/bin>
    Order deny,allow
    Allow from all
</Directory>
</VirtualHost>

我尝试禁用 000-default 站点(使用 a2dissite),但这无济于事。执行此操作后,我得到一个内部服务器错误页面。在修复了一些权限后,我设法得到了这个 Pylons 错误日志:

sudo tail /var/log/apache2/ckan.emap.fgv.br.error.log 
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]     app_iter = self.application(environ, start_response)
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]   File "/usr/lib/pymodules/python2.6/repoze/who/middleware.py", line 107, in __call__
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]     app_iter = app(environ, wrapper.wrap_start_response)
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]   File "/home/flavio/var/srvc/ckan.emap.fgv.br/pyenv/lib/python2.6/site-packages/pylons/middleware.py", line 201, in __call__
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]     self.app, environ, catch_exc_info=True)
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]   File "/home/flavio/var/srvc/ckan.emap.fgv.br/pyenv/lib/python2.6/site-packages/pylons/util.py", line 94, in call_wsgi_application
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]     app_iter = application(environ, start_response)
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]   File "/usr/lib/pymodules/python2.6/weberror/evalexception.py", line 226, in __call__
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110]     "The EvalException middleware is not usable in a "
[Wed Mar 30 12:38:32 2011] [error] [client 10.250.48.110] AssertionError: The EvalException middleware is not usable in a multi-process environment

谁能指出我错过了什么?

【问题讨论】:

  • apache 错误日志的日志会很有帮助
  • 您是否尝试完全指定服务器名称?
  • 没有生成日志条目,是的,我完全指定了服务器名称
  • 我假设 wsgi 脚本的路径如下:/home/flavio/var/srvc/ckan.emap.fgv.br/pyenv/bin/ckan.emap.fgv.br。 py 并且服务器具有对脚本的完全访问权限。抱歉,如果这听起来微不足道,但信息很少:D
  • 是的,我仔细检查了路径中没有错字,甚至将脚本更改为 777 以消除任何权限问题。

标签: python apache apache2 pylons mod-wsgi


【解决方案1】:

由于您在 apache 上进行部署,请确保您未处于交互式调试模式 - 该模式使用 EvalException。在你的 Pylons 配置文件 (ckan.emap.fgv.br.ini) 中确保你有这个:

[app:main]
set debug = false

【讨论】:

  • 你知道当调试被禁用时是否可以在 apache 日志中看到异常的堆栈跟踪?请参阅下面的答案/问题。
【解决方案2】:

您的第一个问题是,如果没有 DNS 或本地 /etc/hosts 中的主机名(解析为运行 Apache 的服务器的 IP),则无法在 Apache 中使用基于名称的虚拟主机。

第二个问题是因为 EvalException 不能在多进程服务器配置中使用。阅读:

http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Browser_Based_Debugger

要么禁用 EvalException,要么配置 mod_wsgi,这样您就可以使用带有“默认”单个进程的守护程序模式(不要使用 processes=1)。

有关 Apache/mod_wsgi 可能的各种进程/线程配置的背景,请阅读:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

您想使用一个“wsgi.multiprocess”为假的。

【讨论】:

  • 我实际上只是在 ckan ini 文件中设置了 debug=false 并且它现在可以工作了。
【解决方案3】:

不是“粘贴”环境方面的专家,但不应该:

from paste.deploy.loadwsgi import loadapp

【讨论】:

    【解决方案4】:

    我同意在生产中调试应该被禁用,但我真的很想看到异常的堆栈跟踪。

    现在,如果我在日志中收到 CKAN 内的 500 服务器错误(显示带有错误信息的漂亮 CKAN 页面),我只能找到没有堆栈跟踪的错误描述:

    [Thu Feb 12 17:04:55.037785 2015] [:error] [pid 15293:tid 139979468994304] [remote 89.71.231.138:5513] Error - &lt;type 'exceptions.TypeError'&gt;: 'NoneType' object is not iterable

    有没有办法通过 debug = false 启用完整的堆栈跟踪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      相关资源
      最近更新 更多