2015-12-27 35 views
5

Proszę skonfigurować gunicorn, aby znaleźć aplikację kolby. Domyślam się, że nazwa aplikacji jest zdefiniowana wewnątrz funkcji create_function(), która ukrywa aplikację przed run.py; jednak nie wiem, jak to naprawić. Oto błąd podczas uruchomienia gunicorn z aplikacją:Jak ustawić gunicorn, aby znaleźć aplikację kolby?

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$ 

Struktura wniosek jest następujący:

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 

Pakiet constructer app/__ init__.py Kod:

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 

Wreszcie run.py jest następująca:

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

'aplikacja gunicorn : run' może również działać. – wgwz

Odpowiedz

4

próby uruchomienia gunicorn z linii poleceń tak:

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

Co za szybka odpowiedź! Działa, wspaniale !!! Dodać do tego, jak umieścić resztę kodu w run.py; powiedzieć, umieścić db.create_all() w create_app()? –

1

Dodaj wsgi.py plik do projektu i dodać kolejne wiersze do niej:

from app import create_app 

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

Zapisz i zamknij nowy plik , przejdź do folderu aplikacji i uruchom:

gunicorn --bind 0.0.0.0:8000 wsgi 
+0

Dzięki, ale wygląda na to, że to nie działa. Mam taki sam błąd: '(venv) MacPro: 11a toshio $ gunicorn --bind 0.0.0.0:8000 wsgi [2015-12-27 17:23:58 +0900] [84005] [INFO] Począwszy gunicorn 19.4.1 [2015-12-27 17:23:58 +0900] [84005] [INFO] Słuchanie pod adresem: http://0.0.0.0:8000 (84005) [2015-12-27 17: 23:58 +0900] [84005] [INFO] Używając worker: sync [2015-12-27 17:23:59 +0900] [84008] [INFO] Booting worker with pid: 84008 Nie można znaleźć aplikacji: ' wsgi '' –

+0

@ Toshio Czy uruchamiasz go z folderu projektu? Pamiętaj również, że plik wsgi.py powinien zostać umieszczony w folderze projektu. –

+0

Tak, robię. W moim folderze projektu mam następujące: 'Dockerfile app doc_data.txt run-flask.py unicorn_key.pem README config gunicorn.err run.py wsgi.py __pycache__ danych-dev.sqlite3 requirements.txt tree.log ' @ Toshio –