【问题标题】:Openshift python gear wont deployOpenshift python gear 不会部署
【发布时间】:2015-02-05 12:49:20
【问题描述】:

我最近的 openshift 齿轮有问题,我收到 python 错误 errno 13 ,权限被拒绝。我在这里查看了一下,发现大多数遇到相同问题的人只是忘记了app.run() 之前的if __name__ == "__main__": 声明,但我仍然遇到同样的问题。根据openshift上的日志,错误似乎源于python内置的socket.py。

这是我在 openshift 上的第二个档位,这和我的第一个档位都是使用烧瓶构建的。第一个工作正常,但我的第二个不会工作......

这是我在 openshift 的 python 日志中得到的错误消息:

* Running on http://127.0.0.1:5000/
Traceback (most recent call last):
File "app.py", line 24, in <module>
app.run()
File "/var/lib/openshift/54d242655973ca23980001d1/python/virtenv /lib/python2.7/site-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/werkzeug/serving.py", line 617, in run_simple
inner()
File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/werkzeug/serving.py", line 599, in inner
passthrough_errors, ssl_context).serve_forever()
File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/werkzeug/serving.py", line 408, in make_server
passthrough_errors, ssl_context)
File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/werkzeug/serving.py", line 334, 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

编辑 2: 所以我将 ip 更改为 OPENSHIFT_PYTHON_IP 但错误日志看起来完全一样。这是我的 wsgi.py 代码

#!/usr/bin/python
import os

virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
    execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
    pass

def run_gevent_server(app, ip, port=8080):
    from gevent.pywsgi import WSGIServer
    WSGIServer((ip, port), app).serve_forever()

def run_simple_httpd_server(app, ip, port=8080):
    from wsgiref.simple_server import make_server
    make_server(ip, port, app).serve_forever()

from server import app as application

#
# Below for testing only
#
if __name__ == '__main__':
    ip = os.environ['OPENSHIFT_PYTHON_IP']
    port = 8080
    zapp = impo.load_source('application', 'wsgi/application')

    try:
        run_gevent_server(application, ip, port)
    except:
        run_simple_httpd_server(zapp.application, ip, port)

【问题讨论】:

  • 运行应用程序的用户缺乏监听端口的权限。找出 openshift 允许您使用或联系它们的端口。这不是 * 的编程问题,而是您的服务提供商的帮助台问题。
  • 是的,不过我一开始确实求助于 Openshift 支持,但他们根本没有帮助我......他们只是告诉我去这里发布一个问题......但是谢谢 :)

标签: python flask openshift


【解决方案1】:

您使用的是什么端口/IP 地址?你必须绑定到你的openshift ip地址的8080端口,你不能绑定到127.0.0.1,这是不允许的。

【讨论】:

  • 如果 name == 'main': ip = os.environ['OPENSHIFT_INTERNAL_IP'] port = 8080 zapp = impo.load_source(' application', 'wsgi/application') 尝试:run_gevent_server(application, ip, port) 除外:run_simple_httpd_server(zapp.application, ip, port)
  • 神圣的**没有正确格式化,但这是我的切入点
  • SSH 进入您的应用程序并运行“env | grep IP”,我认为 OPENSHIFT_INTERNAL_IP 不再正确。
  • 它返回 OPENSHIFT_PYTHON_IP 并且我在修复代码时仍然遇到同样的问题:(
  • 你能用新的代码和错误更新你发布的问题吗?