我正在使用一个使用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*
我该如何解决这个问题?
答案 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_module
或fastcgi_module
,或可能是cgi_module
。
如果您只看到cgi_module
,那么您应该可以使用AddHandler cgi-script .py
代替AddHandler fcgid-script .fcgi
。
如果您没有看到这些内容,则可以尝试wsgi
:apachectl -t -D DUMP_MODULES | grep wsgi
。如果您看到wsgi_module
,则表示您可以使用wsgi
。那时,you might be able to follow instructions here under .htaccess
。