如何设置gunicorn以找到烧瓶应用程序?

时间:2015-12-27 07:00:34

标签: python flask gunicorn

请配置gunicorn以找到烧瓶应用程序。 我猜应用程序名称是在create_function()中定义的,从run.py隐藏应用程序;但是,我不知道如何解决它。 以下是使用应用程序运行gunicorn的错误:

  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$

申请结构如下:

  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

包构造函数 app / __ init __。py 代码:

  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

最后 run.py 如下:

  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()

2 个答案:

答案 0 :(得分:5)

尝试从命令行运行gunicorn,如下所示:

gunicorn 'app:create_app("development")'

答案 1 :(得分:1)

wsgi.py文件添加到项目中并向其添加下一行:

from app import create_app

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

保存并关闭新文件,转到您的应用文件夹并运行:

gunicorn --bind 0.0.0.0:8000 wsgi