gpt4 book ai didi

python - 尝试在 Apache/mod_wsgi 上设置 Bottle-powered web 应用程序时出现错误 404

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:04 25 4
gpt4 key购买 nike

我是一名初级程序员。我开始使用 Python 和 Bottle 作为小型 Web 应用程序来打印表单,到目前为止一切顺利。真正的问题是配置 Apache 和 mod_wsgi ,因为我几乎一无所知。

我的问题:我不断收到此错误:

Error 404: Not Found

Sorry, the requested URL /factura/ caused an error: Not found

在工作中,他们给了我地址重定向到一个IP:端口;经过几天阅读 Apache 文档并通过网络查看示例后,我设法设置了配置,因此我的 VirtualHost 不会破坏其他已经运行的虚拟主机。配置如下所示(基于 Bottle 教程部署部分):

Listen port
NameVirtualHost IP:port

<VirtualHost IP:port>
ServerName IP:port

WSGIDaemonProcess factura processes=1 threads=5
WSGIScriptAlias / /var/www/factura/app.wsgi

<Directory /var/www/factura>
WSGIProcessGroup factura
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>

我的 app.wsgi和Bottle教程-部署部分的差不多。我只添加了行 sys.stdout = sys.stderr :

import sys, os, bottle

# Change working directory so relative paths (and template lookup) work again
sys.path = ['/var/www/factura'] + sys.path
os.chdir(os.path.dirname(__file__))

# Error output redirect
# Exception KeyError in 'threading' module
sys.stdout = sys.stderr

import factura
application = bottle.default_app()

这是一些与 Bottle 相关的 python 代码:

from lib import bottle

app = bottle.Bottle()

#serves files in folder 'static'
@app.route('/static/:path#.+#', name='static')
def ...

@app.route("/factura")
@bottle.view("factura")
def ...

@app.route("/print_factura", method="POST")
def ...

我已经阅读了其他一些与此类似的问题,但我无法看到我遗漏了什么。我想问题出在 app.wsgi

更新

文件结构

/var/www/factura/       ## .py files
/views ## here is the web template
/static ## .css and .js of template
/lib ## package with bottle and peewee source files
/data ## inkscape file to play with
/bin ## backup stuff in repo, not used in code

Apache 错误日志只显示

Exception KeyError: KeyError(-1211426160,) in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored这是来自 wsgi/python 问题的警告,由 wsgi issue 197 无害

UPDATE 2 工作
添加了@app.route("/factura/")注意斜线,随着应用程序导入的变化 from factura import app as application这两者一起使它起作用

最佳答案

如果您显式创建应用程序:

app = bottle.Bottle()

然后你应该将它导入你的 app.wsgi 而不是 application = bottle.default_app():

from factura import app as application

但最重要的是这一点。在您的 WSGI 文件中,您执行 import bottle,而在应用程序代码文件中,您执行 from lib import bottle。正如您所解释的,您有两个 Bottle 副本:一个安装在服务器范围内,另一个安装在 lib 目录下。

这就是您收到 404 Not Found 的原因。您实际上是在使用该库的一个实例(创建 app),然后从该库的不同实例为 Apache 提供一个不同的 (default_app)!

当您开始返回正确的 app 时,它开始正常工作。

关于python - 尝试在 Apache/mod_wsgi 上设置 Bottle-powered web 应用程序时出现错误 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com