使用CGI部署Flask应用程序

2024-04-26 20:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Flask框架编写了一个小应用程序。我试着用cgi来主持这个。根据文档,我创建了一个包含以下内容的.cgi文件:

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

CGIHandler().run(app)

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

。。。

File "/usr/lib/pymodules/python2.7/werkzeug/routing.py", line 1075, in bind_to_environ wsgi_server_name = environ.get('HTTP_HOST', environ['SERVER_NAME'])
KeyError: 'SERVER_NAME'
Status: 500 Internal Server Error
Content-Type: text/plain
Content-Length: 59

在我的申请中,我设置了:

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

当我用Flask开发服务器运行应用程序时,它运行得非常好。 如你所知,我对这些东西很陌生,我也在寻找其他有类似错误但没有运气的人。感谢大家的帮助。


Tags: 文件namefromimport框架app应用程序flask
2条回答

为了完整起见,本文将在上述评论之后作为答案发布。

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

The Common Gateway Interface (CGI) is a simple interface for running external programs, software or gateways under an information server in a platform-independent manner. Currently, the supported information servers are HTTP servers.

有关环境变量(丢失并触发错误)的信息,请参阅RFC中的第4.1节。

我将尝试显示我在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['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文件具有flask应用程序。

最重要的是设置权限。我将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文件。

相关问题 更多 >