与Flask框架配置Lighttpd的重写问题
我在使用Flask自带的服务器时,顺利地运行和开发了我的应用,一切都很顺利,感觉也很有趣。不过,部署到Lighttpd上总是让我头疼。我尽量按照说明来操作,但我的应用还是没能正常工作。
这是我目前的配置:
server.modules += ( "mod_fastcgi" )
server.modules += ( "mod_rewrite" )
fastcgi.server = ("/bioinfo/main.fcgi" =>
((
"socket" => "/tmp/bioinfo-fcgi.sock",
"bin-path" => "/var/www/bioinfo/main.fcgi",
"check-local" => "disable",
"max-procs" => 1
))
)
fastcgi.debug = 1
url.rewrite-once = (
"^/bioinfo/static/(.*)$" => "/bioinfo/static/$1",
"^/bioinfo/(.*)$" => "/bioinfo/main.fcgi/$1"
)
# in: /etc/lighttpd/conf-available/10-fastcgi.conf
这个配置能正常显示主页,但后面的页面就不行了。
在我的Flask应用中,有几个app.route处理器,我通过GET或POST请求来访问它们,使用的是客户端的一些XHR。
另外,这是我的.fcgi文件,想确认一下这里没有明显的错误:
#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from main import app
if __name__ == '__main__':
WSGIServer(app).run()
如果有人能找出问题所在,特别是AJAX在应用的URI上不工作(很可能是因为我的重写规则有问题),我会非常感激。提前谢谢大家!
3 个回答
0
我也遇到过同样的问题。对我来说,解决办法是在fcgi文件中,在主函数之前添加这一段代码:
class ScriptNameStripper(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = ''
return self.app(environ, start_response)
app = ScriptNameStripper(app)
测试的时候一定要清除浏览器缓存哦。
0
我知道这个回复是来自未来很久的时间,但我遇到了类似的问题,发现对我有效的解决办法是确保在我的模板中使用了 url_for
。希望你也能解决这个问题!
0
你需要手动切换到你的应用程序运行的目录。