2016-04-08 7 views
1

私はwsgiとapache2を使ってシングルトンフラスコアプリケーションを展開することができました。アプリケーション作成用のファクトリ関数を持つFlaskアプリのデプロイ方法

#!/usr/bin/python 
import sys 
import logging 
logging.basicConfig(stream=sys.stderr) 
sys.path.insert(0,"/var/www/Devrupt/") 

from Devrupt import app as application 
application.secret_key = 'Add your secret key' 

activate_this = '/var/www/Devrupt/venv/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 

私のApache2の.confファイル:

<VirtualHost *:80> 
     ServerName devrupt.com 
     ServerAdmin [email protected] 
     WSGIScriptAlias//var/www/Devrupt/devrupt.wsgi 
     <Directory /var/www/Devrupt/Devrupt/> 
       Order allow,deny 
       Allow from all 
     </Directory> 
     Alias /static /var/www/Devrupt/Devrupt/static 
     <Directory /var/www/Devrupt/Devrupt/static/> 
       Order allow,deny 
       Allow from all 
     </Directory> 
     ErrorLog ${APACHE_LOG_DIR}/error.log 
     LogLevel warn 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 

はどのようにしてアプリケーションを作成するためのファクトリ機能付きフラスコアプリケーションをデプロイしますか?工場出荷時の機能構造を持つ

フラスコアプリケーション:

| - Devrupt 
    | - Devrupt 
     |- app/ 
      |- templates/ 
      |- static/ 
      |- main/ 
       |- __init__.py 
       |- errors.py 
       |- forms.py 
       |- views.py 
      |- __init__.py  # Factory Function 
      |- models.py 
     |- migrations/   # Contains the database migrations scripts 
     |- tests/    # Where unit tests are written 
      |- __init__.py 
      |- test*.py 
     |- venv/    # Contains the python virtual environment 
     |- requirements.txt  # List package dependencies so that it is easy to regenerate an identical virtual environment on a diff machine 
     |- config.py   # Stores the configuration settings 
     |- manage.py   # Launch the application and other applcation tasks 

| - devrupt.wsgi 

mod_wsgi (Apache)は「あなたがアプリケーションを作成するためのファクトリ関数が、シングルトンインスタンスを持っていない場合は、直接アプリケーションとして1つをインポートすることができます。」と述べています

アプリ/ のinitの.py(ファクトリ関数):

# Application Package Constructor 
from flask import Flask, render_template 
from flask.ext.bootstrap import Bootstrap 
from flask.ext.mail import Mail 
from flask.ext.moment import Moment 
from config import config 

bootstrap = Bootstrap() 
moment = Moment() 

def create_app(config_name): 
    app = Flask(__name__) 
    app.config.from_object(config[config_name]) 
    config[config_name].init_app(app) 

    bootstrap.init_app(app) 
    moment.init_app(app) 

    # Attach Routes and custom error messages here 
    from .main import main as main_blueprint 
    app.register_blueprint(main_blueprint) 


return app 

何ammendments私は工場機能のアプリケーション上で動作することを可能にするためにしなければならないのですか?

+0

なぜ工場が必要ですか?あなたがシングルトンとして正常に動作しているなら、あなたは大丈夫です。ファクトリはディレクトリ構造とは何の関係もないため、変更する必要があるとは言えません。これはコードで定義するものです。あなたはファクトリ関数を書いていますか?もしそうでなければ、それはあなたが始める必要がある場所です。 – dirn

答えて

0

.wsgiファイルにアプリケーションオブジェクトがあることを確認するだけです。このオブジェクトは、ファクトリ関数を使用して作成できます。例:

from Devrupt import application_factory 
application = application_factory() 

これは簡単です! 本当にそれを書き出すには、devrupt.wsgiを次のように修正してください。

#!/usr/bin/python 
activate_this = 'var/www/Devrupt/venv/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 
import sys 
import logging 
logging.basicConfig(stream=sys.stderr) 
sys.path.insert(0,"/var/www/") 

from Devrupt import create_app 
application = create_app('development') 
+0

私はファクトファンクション(app/__ init__.py)のコードを質問に追加しました。 .wsgiファイルにアプリケーションオブジェクトを追加するにはどうすればよいですか? – luishengjie

関連する問題