flask:在此服务器上找不到请求的URL

时间:2016-11-18 15:52:42

标签: python apache .htaccess flask

enter image description here

我正在使用一个使用apache 2.4的共享主机帐户,尝试使用http://fgimian.github.io/blog/2014/02/14/serving-a-python-flask-website-on-hostmonster部署一个烧瓶应用程序。我已将代码和fcgi脚本放在public_html文件夹中该文件夹的内容位于上面的屏幕截图中:

manage_apache.fcgi脚本是:

#!/home/username/anaconda2/bin/python
import sys,os
from flup.server.fcgi import WSGIServer
sys.path.insert(0, '/home/username/public_html')
from myflaskapp.settings import Config, SharedConfig
from myflaskapp.app import create_app

if __name__ == '__main__':
    app = create_app(SharedConfig)
    WSGIServer(app).run()

我已经完成了最后一步,并在命令行中使用putty在SSH中测试它:

[~/public_html]# ./manage_apache.fcgi

我可以看到正在生成的正确网页,所以我假设我的主机支持快速cgi。我没有得到任何python错误。

文章中的.htaccess文件是:

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ manage_apache.fcgi/$1 [QSA,L]

在我浏览mysite.org的浏览器中,我正在

Not Found

The requested URL /manage_apache.fcgi/ was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

根据支持.htaccess文件重定向到manage_apache.fcgi / $ 1

-rwxr-xr-x 1 myusername myusername Nov 22 17:26 manage_apache.fcgi*

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我怀疑

sys.path.insert(0, '/home/username/public_html')

是一个绝对路径,但是烧瓶应用程序正在查找与烧瓶网关相关的相对路径,但无法找到它。

您是否尝试将库包装在应用实例中 - 在应用实例中移动绝对路径?

例如,请参阅http://werkzeug.pocoo.org/: 来自werkzeug.wrappers导入请求,响应

@Request.application
def application(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    # move absolute path here
    run_simple('localhost', 4000, application)

答案 1 :(得分:1)

我怀疑该主机不支持fcgi。仅仅因为主机允许您在命令行上运行Python脚本并不意味着他们在Apache中配置了mod_fcgi。

试试这个:apachectl -t -D DUMP_MODULES | grep cgi。您应该看到fcgi_modulefastcgi_module,或可能是cgi_module

如果您只看到cgi_module,那么您应该可以使用AddHandler cgi-script .py代替AddHandler fcgid-script .fcgi

如果您没有看到这些内容,则可以尝试wsgiapachectl -t -D DUMP_MODULES | grep wsgi。如果您看到wsgi_module,则表示您可以使用wsgi。那时,you might be able to follow instructions here under .htaccess