2016-08-16 2 views
0

Ich stehe vor einer WSCI-Ausnahme beim Ausführen meiner Flasche Anwendungscode auf dem Server.WSGI-Anwendung ausgelöst eine Ausnahme

Hier mein manage.py ist

from app import app1, db 
from flask_script import Manager, Shell 

from flask_migrate import Migrate, MigrateCommand 
migrate = Migrate(app1, db) 

manager = Manager(app1) 
manager.add_command('db', MigrateCommand) 


def make_shell_context(): 
    return dict(app=app1, db=db) 

manager.add_command("shell", Shell(make_context=make_shell_context)) 

if __name__ == '__main__': 

    manager.run() 

und app.py

app1 = Flask(__name__) 
app1.config.from_object(config['default']) 

rest_api = Api(app1) 

db = SQLAlchemy(app1) 

bcrypt = Bcrypt(app1) 

from app import routes 

Compress(app1) 
assets = Environment(app1) 
define_assets(assets) 
cache = Cache(app1,config={'CACHE_TYPE': 'simple'}) 

In meinem lokalen, gibt es keinen Fehler. Ich starte meine Anwendung mit diesem python manage.py runserver Befehl.

Nun, im Server habe ich erfolgreich diese Schritte python manage.py db init, python manage.py db migrate, python manage.py db upgrade und es erstellt, aktualisierte Datenbank erfolgreich. Ich habe passenger installiert, um die Anwendung zu bedienen.

Mein passenger_wsgi.py sieht aus wie diese

from manage import manager as application 

Nun, wenn ich passenger start --port 3003 -a '0.0.0.0' laufen, es wirft mir diesen Fehler

[ 2016-08-16 07:44:15.0758 30180/7f90226f8700 age/Cor/Con/InternalUtils.cpp:112 ]: [Client 2-1] Sending 502 response: application did not send a complete response 
App 30251 stderr: Traceback (most recent call last): 
App 30251 stderr: File "/usr/share/passenger/helper-scripts/wsgi-loader.py", line 163, in main_loop 
App 30251 stderr:  socket_hijacked = self.process_request(env, input_stream, client) 
App 30251 stderr: File "/usr/share/passenger/helper-scripts/wsgi-loader.py", line 297, in process_request 
App 30251 stderr:  result = self.app(env, start_response) 
App 30251 stderr: TypeError: __call__() takes at most 2 arguments (3 given) 
+4

'Manager' ist nicht Ihre Anwendung' app1' ist in 'app.py'. Der Manager wird nur verwendet, um es in Ihrer Entwicklungsumgebung zu verwalten. –

+0

Großartig, das wusste ich nicht. Können Sie einige Tutorials teilen? Eine andere Sache ist, muss ich nicht "manage.py db migrate" auf dem Server ausführen? –

+0

Sie müssen das ausführen, um die Datenbank zu migrieren. Das bezieht sich nicht auf die WSGI-Anwendung, die der Passagier sucht. Wenn Sie die Migration durchführen, laden Sie den Passagier erneut und alles ist gut. Davidism's Antwort ist richtig. –

Antwort

2

Import der Flasche Anwendung als die Anwendung auszuführen, nicht das Flask-Script Manager.

from app import app1 as application 

Ein Flask-Script-Manager dient zum Ausführen von Befehlen in der Befehlszeile. Es ist keine WSGI-Anwendung. Sie können es weiterhin verwenden, um andere Befehle auszuführen, aber der WSGI-Server benötigt die Flask-Anwendung.

+0

@Joe Doherty hat die Frage in seinem Kommentar beantwortet, aber ich akzeptiere es :) –

Verwandte Themen