使用CGI部署Flask应用程序

时间:2011-09-06 18:56:27

标签: python flask cgi

我使用Flask框架编写了一个小应用程序。我尝试使用cgi来托管这个。在文档之后,我创建了一个包含以下内容的.cgi文件:

#!/usr/bin/python
from wsgiref.handlers import CGIHandler
from yourapplication import app

CGIHandler().run(app)

运行该文件会导致以下错误:

...

  

文件“/usr/lib/pymodules/python2.7/werkzeug/routing.py”,第1075行,在bind_to_environ中       wsgi_server_name = environ.get('HTTP_HOST',environ ['SERVER_NAME'])
  KeyError:'SERVER_NAME'
  状态:500内部服务器错误
  内容类型:text / plain
  内容长度:59

在我的应用程序中,我设置了:

app.config['SERVER_NAME'] = 'localhost:5000'

当我使用Flask开发服务器运行应用程序时,它运行得非常好。 你可以告诉我,我对这些东西很新,我已经找到了其他有类似错误但没有运气的人。感谢所有帮助。

2 个答案:

答案 0 :(得分:2)

我将尝试展示我所做的事情,并且它正在Godaddy共享主机帐户中工作:

在MYSITE文件夹的cgi-bin文件夹中,我添加了以下cgi文件:

#!/home/USERNAME/.local/bin/python3
from wsgiref.handlers import CGIHandler

from sys import path
path.insert(0, '/home/USERNAME/public_html/MYSITE/')
from __init__ import app

class ProxyFix(object):
   def __init__(self, app):
       self.app = app

   def __call__(self, environ, start_response):
       environ['SERVER_NAME'] = ""
       environ['SERVER_PORT'] = "80"
       environ['REQUEST_METHOD'] = "GET"
       environ['SCRIPT_NAME'] = ""
       environ['PATH_INFO'] = "/"
       environ['QUERY_STRING'] = ""
       environ['SERVER_PROTOCOL'] = "HTTP/1.1"
       return self.app(environ, start_response)

if __name__ == '__main__':
    app.wsgi_app = ProxyFix(app.wsgi_app)
    CGIHandler().run(app)

正如您所看到的,MYSITE文件夹中的 init 文件包含烧瓶应用程序。

最重要的是设置权限。我将755设置为此文件夹权限,以及“/home/USERNAME/.local/bin/python3”文件夹!请记住,系统需要此权限才能打开烧瓶。

要打开cgi,我在MYSITE文件夹中有以下.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /home/USERNAME/public_html/MYSITE/cgi-bin/application.cgi/$1 [L]

因此,当有人进入您的页面时,它会呈现cgi文件。

答案 1 :(得分:0)

为了完整起见,这是在上述评论之后作为答案发布的。

如上所述,cgi脚本应该由某个服务器执行。这是摘要from CGI 1.1 RFC

  

通用网关接口(CGI)是一个简单的运行界面   信息服务器下的外部程序,软件或网关   独立于平台的方式。目前,支持的信息   服务器是HTTP服务器。

对于环境变量(缺失并触发错误),请参阅RFC中的sectuib 4.1。