我正在开发一个小型的网页仪表板 - 项目,后端用python的web.py框架实现。
仪表板上有各种各样的小部件,其中一个小部件的后端也使用web.py实现。问题是只有一个指定的应用程序入口点似乎一次起作用。仪表板和小部件的apache配置都放在同一个文件中。 apache2 / conf.d /中的原始配置文件(实际工作了一段时间)如下所示:
WSGIPythonPath /var/www/ProjectDASHBOARD/api
WSGIScriptAlias /ProjectDASHBOARD/api /var/www/ProjectDASHBOARD/api/api.py/
AddType text/html .py
<Directory /var/www/ProjectDASHBOARD/api/>
Order deny,allow
Allow from all
</Directory>
# Stuff for graphingwidget
WSGIPythonPath /var/www/ProjectDASHBOARD/widgets/graphingwidget/api
WSGIScriptAlias /ProjectDASHBOARD/widgets/graphingwidget/api /var/www/ProjectDASHBOARD/widgets/graphingwidget/api/api.py/
AddType text/html .py
<Directory /var/www/ProjectDASHBOARD/widgets/graphingwidget/api/>
Order deny,allow
Allow from all
</Directory>
仅此一项不起作用,api.py文件中还需要下一段代码,检查其approriate路径并在未找到时添加它们(摘自小部件的文件):
import web
import json
import sys
path = '/var/www/ProjectDASHBOARD/widgets/graphingwidget/api'
if path not in sys.path:
sys.path.append(path)
对仪表板进行了类似的检查。
所有这一切确实工作了整整一个星期,然后在尝试从头开始安装时突然停止工作,使问题更加令人困惑。尝试从网页访问api时收到的错误是HTTP错误500内部服务器错误。然后在对apache配置文件进行一些更改之后,api的一个开始工作:
WSGIPythonPath /var/www/ProjectDASHBOARD/widgets/graphingwidget/api
WSGIPythonPath /var/www/ProjectDASHBOARD/api
WSGIScriptAlias /ProjectDASHBOARD/api /var/www/ProjectDASHBOARD/api/api.py/
WSGIScriptAlias /ProjectDASHBOARD/widgets/graphingwidget/api /var/www/ProjectDASHBOARD/widgets/graphingwidget/api/api.py/
AddType text/html .py
<Directory /var/www/ProjectDASHBOARD/api/>
Order deny,allow
Allow from all
</Directory>
# Stuff for graphingwidget
AddType text/html .py
<Directory /var/www/ProjectDASHBOARD/widgets/graphingwidget/api/>
Order deny,allow
Allow from all
</Directory>
基本上只是将路径移动到文件的开头,然后稍微切换顺序,突然之一api开始再次工作。稍微更改顺序然后使另一个api工作并制动另一个。我不记得路径的正确顺序,但关键是它曾经运行良好,然后在安装到新的相同虚拟机时停止工作,并且只有一个api的工作取决于路径的顺序
最初配置文件位于不同的文件中,但它不能像那样工作。是否存在诸如“目标WSGI脚本'路径'之类的各种错误无法作为Python模块加载。”,并且只有在它们被移动到同一文件时才开始工作。
我在这里想到,其中一条路径被另一条路径覆盖,或者说整个配置一直都是根本错误的,而且一直只能靠运气(整整一周,没有问题......)
有关错误的任何线索?
答案 0 :(得分:0)
对于迟到的回复感到抱歉,但案件基本上必须在http://webpy.org/install#apachemodwsgi仔细阅读RTFM并使用.htaccess文件。
不知道为什么原始问题中的解决方案能够起作用。