【问题标题】:503 Service Temporarily Unavailable in Openshift Flask Application503 服务在 Openshift Flask 应用程序中暂时不可用
【发布时间】:2016-11-30 11:09:36
【问题描述】:

我一直在努力在 Openshift 中部署 Flask 应用程序。首先,我尝试部署我正在开发的应用程序。由于没有成功,我决定创建一个示例 Hello World 并进行部署。

这里是app.py的代码

from flask import Flask, render_template
app = Flask(__name__)


@app.route('/')
def hello_world():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

我确实使用 setup.py 文件中的 install_requirements:

from setuptools import setup

setup(name='SweetyPro',
     version='1.0',
     description='OpenShift App',
     author='Your Name',
     author_email='waglds@gmail.com',
     url='http://www.python.org/sigs/distutils-sig/',
     install_requires=['Django>=1.3',
                      'Flask==0.11.1'],    )

我还在 requirements.txt 中设置了烧瓶和需求。但是,Openshift 只说它是一项服务暂时不可用。

我通过rhc tail -a my_application查看了日志,它提示我:

==> app-root/logs/python.log <==
Traceback (most recent call last):
  File "app.py", line 10, in <module>
    app.run()
  File "/var/lib/openshift/57976d4c7628e1a34e000179/python/virtenv/lib/python2.7/site-packages/Flask-0.11.1-py2.7.egg/flask/app.py", line 843, in run
    run_simple(host, port, self, **options)
  File "/var/lib/openshift/57976d4c7628e1a34e000179/python/virtenv/lib/python2.7/site-packages/Werkzeug-0.11.10-py2.7.egg/werkzeug/serving.py", line 694, in run_simple
    inner()
  File "/var/lib/openshift/57976d4c7628e1a34e000179/python/virtenv/lib/python2.7/site-packages/Werkzeug-0.11.10-py2.7.egg/werkzeug/serving.py", line 656, in inner
    fd=fd)
  File "/var/lib/openshift/57976d4c7628e1a34e000179/python/virtenv/lib/python2.7/site-packages/Werkzeug-0.11.10-py2.7.egg/werkzeug/serving.py", line 550, in make_server
    passthrough_errors, ssl_context, fd=fd)
  File "/var/lib/openshift/57976d4c7628e1a34e000179/python/virtenv/lib/python2.7/site-packages/Werkzeug-0.11.10-py2.7.egg/werkzeug/serving.py", line 464, in __init__
    HTTPServer.__init__(self, (host, int(port)), handler)
  File "/opt/rh/python27/root/usr/lib64/python2.7/SocketServer.py", line 419, in __init__
    self.server_bind()
  File "/opt/rh/python27/root/usr/lib64/python2.7/BaseHTTPServer.py", line 108, in server_bind
    SocketServer.TCPServer.server_bind(self)
  File "/opt/rh/python27/root/usr/lib64/python2.7/SocketServer.py", line 430, in server_bind
    self.socket.bind(self.server_address)
  File "/opt/rh/python27/root/usr/lib64/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied

谁能帮帮我,好吗?我已经做了我能做的。谢谢!

【问题讨论】:

  • 无关:你可能不想同时安装 Flask 和 Django。
  • 我也确实删除了 Django 依赖项。还是一样。

标签: deployment flask openshift


【解决方案1】:

因为您提供了一个app.py 文件,它将运行以启动您的应用程序。这将使用内置的 Flask 开发服务器和代码的设置方式。但是,在这样做时,您需要告诉 Flask 开发服务器要侦听哪个端口,您不能使用 Flask 开发服务器用户的默认端口。该端口在OPENSHIFT_PYTHON_PORT 环境变量中可用。见:

您可能还需要使用OPENSHIFT_PYTHON_IP 环境变量,并告诉 Flask 开发服务器如果默认情况下它只侦听本地主机,则绑定到哪个主机接口。

另一种方法是将您的 app.py 文件重命名为 wsgi.py 并添加:

application = app

在创建 Flask 应用程序对象之后。通过进行该更改,OpenShift 将改为使用 Apache/mod_wsgi 托管应用程序,它会担心如何托管它。

【讨论】:

  • 哦,谢谢。首先,我尝试更改现有的 wsgi.py 文件并调整代码以接收 ip 和端口。所以,我这样做了: from app import app as application # # 下面仅用于测试 # if name == 'main': ip = os.environ['OPENSHIFT_PYTHON_IP' ] port = os.environ['OPENSHIFT_PYTHON_PORT'] from wsgiref.simple_server import make_server httpd = make_server(ip, port, application) # 等待单个请求,服务并退出。 httpd.handle_request() 我没有成功。但是,当我包含 application = app 时,它确实有效。
  • 当你有一个 wsgi.py(没有 app.py)时,它不会作为程序运行。相反,它被直接加载到 mod_wsgi 中,它期望 application 存在。
  • 谢谢你,@格雷厄姆
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 2018-08-18
  • 2011-12-19
  • 2018-09-16
  • 1970-01-01
相关资源
最近更新 更多