2015-12-27 15 views
5

Configurare gunicorn per trovare un'applicazione per matracci. Immagino che il nome dell'applicazione sia definito all'interno di create_function() nasconde l'applicazione da run.py; tuttavia, non so come risolverlo. Qui è l'errore quando eseguire gunicorn con l'applicazione:Come impostare gunicorn per trovare un'applicazione per i flaconi?

1 (venv) MacPro:11a toshio$ gunicorn run:app 
    2 [2015-12-27 15:10:45 +0900] [83437] [INFO] Starting gunicorn 19.4.1 
    3 [2015-12-27 15:10:45 +0900] [83437] [INFO] Listening at: http://127.0.0.1:8000 (83437) 
    4 [2015-12-27 15:10:45 +0900] [83437] [INFO] Using worker: sync 
    5 [2015-12-27 15:10:45 +0900] [83440] [INFO] Booting worker with pid: 83440 
    6 Failed to find application: 'run' 
    7 [2015-12-27 15:10:51 +0900] [83440] [INFO] Worker exiting (pid: 83440) 
    8 [2015-12-27 15:10:52 +0900] [83437] [INFO] Shutting down: Master 
    9 [2015-12-27 15:10:52 +0900] [83437] [INFO] Reason: App failed to load. 
10 (venv) MacPro:11a toshio$ 

La struttura dell'applicazione è la seguente:

1 ├── app 
    2 │   ├── __init__.py 
    3 │   ├── main 
    4 │   │   ├── __init__.py 
    5 │   │   ├── forms.py 
    6 │   │   └── routes.py 
    7 │   ├── models.py 
    8 │   ├── static 
    9 │   │   ├── js 
10 │   │   ├── css 
11 │   │   ├── pdf 
12 │   └── templates 
13 │    ├── base.html 
14 │    ├── index.html 
15 │    ├── login.html 
16 ├── config 
17 │   └── development.py 
18 ├── data-dev.sqlite3 
19 ├── run.py 

Il pacchetto constructer app/__ init__.py codice:

1 import os 
    2 import subprocess 
    3 import imghdr 
    4 from datetime import datetime 
    5 from flask import Flask, render_template, session, g, redirect, url_for, request 
    6 from flask.ext.script import Manager 
    7 from flask.ext.wtf import Form 
    8 from flask.ext.bootstrap import Bootstrap 
    9 from wtforms import StringField, SubmitField, ValidationError, PasswordField, BooleanField 
10 from wtforms.validators import Required, Length 
11 from werkzeug import secure_filename 
12 from werkzeug.security import generate_password_hash, check_password_hash 
13 from flask_wtf.file import FileField 
14 from flask.ext.sqlalchemy import SQLAlchemy 
15 from flask.ext.migrate import Migrate, MigrateCommand 
16 from flask.ext.login import LoginManager, UserMixin, login_user, logout_user, login_required 

18 bootstrap = Bootstrap() 
19 db = SQLAlchemy() 
20 lm = LoginManager() 
21 lm.login_view = 'main.login' 
22 
23 def create_app(config_name): 
24  """ Create an application instance """ 
25  app = Flask(__name__, static_folder = 'static') 
26 
27  # import configration 
28  cfg = os.path.join(os.getcwd(), 'config', config_name + '.py') 
29  app.config.from_pyfile(cfg) 
30 
31  # initialize extenstions 
32  bootstrap.init_app(app) 
33  db.init_app(app) 
34  lm.init_app(app) 
35 
36  # import blueprints 
37  from .main import main as main_blueprint 
38  app.register_blueprint(main_blueprint) 
39 
40  return app 

Infine run.py è follwing:

1 #!/usr/bin/env python 
    2 from app import create_app, db 
    3 from app.models import User, Book 
    4 
    5 
    6 if __name__ == '__main__': 
    7  app = create_app('development') 
    8  with app.app_context(): 
    9   db.create_all() 
10   if User.query.filter_by(username='somebody').first() is None: 
11    User.register('somebody', 'abc') 
12  app.run() 
+0

'gunicorn app : run' potrebbe funzionare pure. – wgwz

risposta

4

tenta di eseguire gunicorn dalla riga di comando in questo modo:

gunicorn 'app:create_app("development")' 
+1

Che risposta rapida! Funziona, stupendo !!! Aggiungeteci, come dovrebbe mettere il resto del codice in run.py; dì, metti db.create_all() in create_app()? –

1

Aggiungi wsgi.py file al progetto e aggiungere righe successive ad esso:

from app import create_app 

application = create_app('development') 
if __name__ == "__main__": 
    application.run() 

Salvare e chiudere il nuovo file , vai alla cartella della tua app ed esegui:

gunicorn --bind 0.0.0.0:8000 wsgi 
+0

Grazie, ma sembra che non funzioni. Ho lo stesso errore in questo modo: '(venv) MacPro: 11a toshio $ gunicorn --bind 0.0.0.0:8000 wsgi [2015-12-27 17:23:58 +0900] [84005] [INFO] Starting gunicorn 19.4.1 [2015-12-27 17:23:58 +0900] [84005] [INFO] Ascolto: http://0.0.0.0:8000 (84005) [2015-12-27 17: 23:58 +0900] [84005] [INFO] Utilizzo lavoratore: sincronizzazione [2015-12-27 17:23:59 +0900] [84008] [INFO] Avvio con pid: 84008 Impossibile trovare l'applicazione: ' wsgi '' –

+0

@Toshio Lo si esegue dalla cartella del progetto? Inoltre, si noti che wsgi.py deve essere inserito nella cartella del progetto. –

+0

Sì, lo so. Nella mia cartella di progetto che ho questi: 'Dockerfile app doc_data.txt run-flask.py unicorn_key.pem README config gunicorn.err run.py wsgi.py __pycache__ dati-dev.sqlite3 requirements.txt tree.log ' @Toshio –