2016-04-08 42 views
1

.wsgi dosyasında aşağıdaki yapılandırmaları kullanarak tek bir flask uygulamasını wsgi ve apache2 ile dağıtmayı başardım. Uygulama oluşturma için fabrika işlevli bir Flask uygulaması nasıl dağıtılır

#!/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)) 

Benim apache2 .conf dosyası:

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

nasıl uygulama yaratılması için fabrika fonksiyonu ile Matara uygulamayı dağıtmak? Fabrika fonksiyon yapısı ile

Flask Uygulama:

| - 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) bildiren "Eğer doğrudan alabilir uygulama oluşturulması için fabrika işlevini ancak tekil örneği yoksa uygulama olarak, bir."

app/init .py (fabrika işlevi):

# 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 

Ne Maddeleri i Fabrika Fonksiyon Uygulama üzerinde çalışmaya etkinleştirmek için ne gerekiyor?

+0

Neden bir fabrikaya ihtiyacınız var? Tek kişilik olarak başarılı bir şekilde çalışıyorsanız, iyisiniz. Ve değiştirmenizi istediğinizi size söyleyemeyiz çünkü bir fabrikada dizin yapısıyla hiçbir ilgisi yok, kodda tanımladığınız bir şey var. Bir fabrika fonksiyonu yazdınız mı? Eğer değilse, başlangıç ​​yapmanız gereken yerdir. – dirn

cevap

0

Sadece .wsgi dosyanızda bir uygulama nesnesinin olduğundan emin olmanız gerekir. Bu nesne fabrika işlevi kullanılarak oluşturulabilir. Örneğin:

Bu kadar kolay! Ama gerçekten hecelemek için, devrupt.wsgi dosyasını şu şekilde değiştirin:

#!/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

Bu yüzden Fabrika Fonksiyonumu (app/__ init__.py) kodunu soruna ekledim. Uygulama nesnesini .wsgi dosyasına nasıl eklerim? – luishengjie