Mod_wsgi pylons(ckan)安装无法正常工作

时间:2011-03-30 11:39:26

标签: python apache apache2 pylons mod-wsgi

我正在根据这些说明设置CKAN,一个塔架应用程序: 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

有谁可以指出我错过了什么?

4 个答案:

答案 0 :(得分:16)

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

[app:main]
set debug = false

答案 1 :(得分:3)

您的第一个问题是,您无法在Apache中使用基于名称的虚拟主机,而无需在DNS或本地/ etc / hosts中使用主机名,这些主机名将解析为运行Apache的服务器的IP。

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

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

禁用EvalException或配置mod_wsgi,以便使用守护进程模式和单个进程的“default”(不要使用processes = 1)。

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

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

你想使用一个'wsgi.multiprocess'是假的。

答案 2 :(得分:1)

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

from paste.deploy.loadwsgi import loadapp

答案 3 :(得分:0)

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

现在如果我在CKAN中遇到500 Server错误(显示错误信息的好CKAN页面),我只能找到没有堆栈跟踪的错误描述:

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

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

相关问题