2014-09-09 2 views
1

내 플라스크 응용 프로그램의 config.py에 나는 LocalConfigProdConfig이 있으며, 일단 응용 프로그램이 배포되면 프로덕션에 사용됩니다.create_app를 사용하여 uwsgi에 플라스크 응용 프로그램의 다른 구성 설정을 제공하는 방법은 무엇입니까?

이제 을 사용하여 Nginx에 앱을 제공합니다. 여기에서 myapp.wsgi을 만들었습니다. 그것은 uWSGI 제대로, 내가 알고 싶은

def create_app(config=None, app_name=None, blueprints=None): 

    # some code 
    app = Flask(app_name, instance_path=INSTANCE_FOLDER_PATH, instance_relative_config=True) 
    configure_app(app, config) 
    # some other code 

    return app 

def configure_app(app, config=None): 
    """Different ways of configurations.""" 

    app.config.from_object(LocalConfig) 
    app.config.from_pyfile('production.cfg', silent=True) 

    if config: 
     app.config.from_object(config) 

됩니다

from myapp import create_app 
from myapp.config import ProdConfig 

app = create_app(config=ProdConfig) 

create_appapp.py 다른 하나 는 다음과 같이 정의된다? uWSGI가 ProdConfig을 성공적으로 적용 할 수 있습니까?

다른 환경 설정을 구별하기 위해 환경 변수를 사용하는 것이 더 낫습니까? if os.environ.get('PROD', True): #do something?

어느 쪽이 더 낫습니까? 플라스크의 create_app() 하나 또는 env 변수 하나? 다른 적절한 접근법은 무엇입니까?

답변

4

이렇게하는 일반적인 방법은 구성을 사전에 저장하는 것입니다. 이 같은

class Config: 
    ALL_CAPS_CONFIG = 'SOME VALUE' 

class DevConfig(Config): 
    pass 

class TestConfig(Config): 
    pass 

class ProdConfig(Config): 
    pass 

configs = { 
    'dev' : DevConfig, 
    'test' : TestConfig, 
    'prod' : ProdConfig, 
    'default' : ProdConfig 
    } 

그리고 당신은 실제로 응용 프로그램을 만들 경우 다음, 당신이 할 거라고 뭔가 :: 쉽게 쉘에서 변수를 변경하여 환경 사이를 전환 할 수 있습니다

from config import configs 
import os 

evn = os.environ.get('MY_FLASK_APP_ENV', 'default') 

create_app(config=configs[evn]) 

그런 식으로.

3

환경 변수가 완전히 다른 config.py 파일을 가리키는 것이 실제로 훨씬 더 좋습니다. 개인적으로 필자는 기본 및 개발 설정을 포함하는 config.py 파일을 가지고 있으며 환경 변수에서 위치가 지정된 프로덕션 구성을위한 또 다른 config.py를 가지고 있습니다.

Flask Configuration 설명서는 구성 파일의 설정 방법을 설명하는 데 유용하므로 설명서를 참조하는 것이 좋습니다.