2016-07-26 11 views
0

Ich habe Probleme, eine Flask-Anwendung in Openshipt zu implementieren. Zunächst habe ich versucht, eine Anwendung zu entwickeln, die ich gerade entwickle. Da ich nicht erfolgreich war, entschied ich mich, ein Beispiel Hello World zu erstellen und es zu implementieren. Hier503 Vorübergehend nicht verfügbar in der Openshift Flask-Anwendung

ist der Code von 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() 

ich die install_requirements in setup.py-Datei verwenden zu tun:

from setuptools import setup 

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

ich auch Kolben und eine Anforderung in requirements.txt einzurichten. Openshift sagt jedoch nur, dass es sich um einen vorübergehend nicht verfügbaren Dienst handelt.

geprüft I -a my_application, das Protokoll durch rhc Schwanz heraus und es fordert mich auf diese:

==> 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 

Könnte mir jemand helfen, bitte? Ich habe schon getan, was ich konnte. Vielen Dank!

+0

Nicht verwandt: Sie möchten wahrscheinlich nicht sowohl Flask und Django installieren. – dirn

+0

Ich habe auch Django Abhängigkeit entfernt. Immer noch das gleiche. – wagnerdelima

Antwort

2

Da Sie eine app.py Datei zur Verfügung gestellt haben, wird diese ausgeführt, um Ihre Anwendung zu starten. Dies verwendet den eingebauten Flask-Entwicklungsserver mit der Art, wie der Code eingerichtet wird. Dazu müssen Sie jedoch dem Flask-Entwicklungsserver mitteilen, welchen Port er überwachen soll. Sie können nicht den Standard-Port verwenden, den die Flask-Entwicklungsserverbenutzer verwenden. Der Port ist in der Umgebungsvariablen OPENSHIFT_PYTHON_PORT verfügbar. Siehe:

Sie auch OPENSHIFT_PYTHON_IP Umgebungsvariable verwendet werden müssen und sagen, die Entwicklung Flask-Server, welche Host-Schnittstelle zu binden, wenn standardmäßig nur auf localhost hört.

Eine Alternative zu, dass alle Ihre app.py Datei zu wsgi.py und fügen Sie umbenennen: Objekt

application = app 

nach der Flasche Anwendung erstellt wird. Wenn Sie diese Änderung vornehmen, wird OpenShift die Anwendung stattdessen mit Apache/mod_wsgi hosten und sich darum kümmern, wie sie gehostet wird.

+0

Oh, Danke. Zuerst habe ich versucht, die bestehende Datei wsgi.py zu ändern und den Code anzupassen, um die IP und den Port zu erhalten. Also, ich habe das: von App Import App als Anwendung # # Below für die Prüfung nur # wenn __name__ == '__main__': ip = os.environ [ 'OPENSHIFT_PYTHON_IP'] port = o .environ ['OPENSHIFT_PYTHON_PORT'] von wsgiref.simple_server importieren make_server httpd = make_server (ip, port, anwendung) # Warte auf eine einzelne Anfrage, serviere sie und beende sie. httpd.handle_request() Ich war nicht erfolgreich. Aber als ich app = app einschloss, hat es funktioniert. – wagnerdelima

+0

Wenn Sie eine wsgi.py (keine app.py) haben, wird sie nicht als Programm ausgeführt. Stattdessen wird es direkt in mod_wsgi geladen, was erwartet, dass "application" existiert. –

+0

Danke, @Graham – wagnerdelima