可以在没有端口的情况下运行烧瓶吗?

时间:2019-02-08 00:15:24

标签: python python-2.7 flask

我尝试使用以下方式在托管中启动Flask:

if __name__ == "__main__":
    app.run('0.0.0.0', 8000)

但是主机托管者关闭了8080端口,是否可以使用默认端口80运行Flask?

我尝试过它给我这个错误:

Use a production WSGI server instead.                                                                                                                                                                     
 * Debug mode: off                                                                                                                                                                                           
Traceback (most recent call last):                                                                                                                                                                           
  File "__init__.py", line 461, in <module>                                                                                                                                                                  
    app.run('0.0.0.0', 80)                                                                                                                                                                                   
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/flask/app.py", line 943, in run                                                                                          
    run_simple(host, port, self, **options)                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 814, in run_simple                                                                            
    inner()                                                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 774, in inner                                                                                 
    fd=fd)                                                                                                                                                                                                   
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 660, in make_server                                                                           
    passthrough_errors, ssl_context, fd=fd)                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 577, in __init__                                                                              
    self.address_family), handler)                                                                                                                                                                           
  File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__                                                                                                                                           
    self.server_bind()                                                                                                                                                                                       
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind                                                                                                                                      
    SocketServer.TCPServer.server_bind(self)                                                                                                                                                                 
  File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind                                                                                                                                        
    self.socket.bind(self.server_address)                                                                                                                                                                    
  File "/usr/lib/python2.7/socket.py", line 224, in meth                                                                                                                                                     
    return getattr(self._sock,name)(*args)                                                                                                                                                                   
socket.error: [Errno 1] Operation not permitted   

所以,托管者说80端口是开放的。

1 个答案:

答案 0 :(得分:1)

Flask documentation指出:

  

虽然轻巧易用,但Flask的内置服务器却不是   不适合扩展生产,因此适合生产。一些选择   可用于在生产中正确运行Flask的文档   在这里。

该文档还说明了使用WSGI服务器部署Web应用程序的几种方法。 WSGI(Web服务器网关接口)是将来自Web服务器的请求转发到以Python编写的Web应用程序的标准。您将要使用WSGI服务器在主机上运行您的网站,因为这听起来像是您正在尝试将Flask应用程序部署到生产环境中。

为回答您的原始问题,当您尝试在端口80上运行Flask库时,有意将其引发错误,因为它们明确表示您不应将Flask的内置服务器用于生产。这就是您的堆栈跟踪的一部分:

Use a production WSGI server instead.                                                                                                                                                                     
* Debug mode: off    

socket.error: [Errno 1] Operation not permitted   

对于懒惰的人,或者如果以上链接无效,这是一个使用Gunicorn(copied directly from the above documentation link)的示例

  

独角兽

     

Gunicorn“ Green Unicorn”是用于UNIX的WSGI HTTP服务器。它是   Ruby的Unicorn项目移植的前叉工人模型。它支持   eventlet和greenlet。在此服务器上运行Flask应用程序   很简单:

     

gunicorn myproject:app

     

Gunicorn提供了许多命令行选项–请参见gunicorn -h。对于   例如,以4个工作进程(-w 4)运行Flask应用程序   绑定到本地主机端口4000(-b 127.0.0.1:4000):

     

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app