我是初学程序员。我开始使用Python和Bottle为一个小型Web应用程序打印表单,到目前为止一切顺利。真正的问题是配置Apache和mod_wsgi
,因为我的知识几乎没有。
我的问题:我一直收到此错误:
错误404:未找到
抱歉,请求的网址/ factura /导致错误:找不到
在工作中,他们给了我并重定向到IP:端口;经过几天阅读Apache文档并通过Web查看示例后,我设法设置了配置,因此我的VirtualHost不会破坏已经运行的其他虚拟主机。配置看起来像这样(基于瓶子教程部署部分):
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()
:
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 ...
这里有一些与Bottle有关的python代码:
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
?
更新
文件结构
Exception KeyError: KeyError(-1211426160,) in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored
Apache错误日志仅显示
@app.route("/factura/")
这是来自wsgi / python问题的警告,wsgi issue 197
更新2 正在运作
添加from factura import app as application
注意跟踪斜线,随着应用导入{{1}}的变化,这两者一起使其工作
答案 0 :(得分:3)
如果您明确创建应用程序:
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
时,它开始正常工作。