Flask: How to manage different environment databases?

后端 未结 5 1981
青春惊慌失措
青春惊慌失措 2020-12-13 11:27

I am working on an app which looks similar to

facebook/
         __init__.py
         feed/
             __init__.py
             business.py
             vi         


        
5条回答
  •  我在风中等你
    2020-12-13 12:01

    Solution I use:

    #__init__.py
    app = Flask(__name__)
    app.config.from_object('settings')
    app.config.from_envvar('MYCOOLAPP_CONFIG',silent=True)
    

    On the same level from which application loads:

    #settings.py
    SERVER_NAME="dev.app.com"
    DEBUG=True
    SECRET_KEY='xxxxxxxxxx'
    
    
    #settings_production.py
    SERVER_NAME="app.com"
    DEBUG=False
    

    So. If Environment Variable MYCOOLAPP_CONFIG does not exist -> only settings.py will load, which refers to default settings (development server as for me)
    This is the reason for "silent=True", second config file not required, while settings.py default for development and with default values for common config keys

    If any other settings_file will be loaded in addition to first one values inside it overrides values in original one. (in my example DEBUG and SERVER_NAME will be overrided, while SECRET_KEY stays same for all servers)

    The only thing you should discover for yourself depends on the way how you launch your application
    Before launching ENVVAR MYCOOLAPP_CONFIG should be set
    For example I run with supervisor daemon and on production server I just put this in supervisor config file:

    environment=MYCOOLAPP_CONFIG="/home/tigra/mycoolapp/settings_production.py"
    

    With this way you can easily manage all your configuration files, moreover, with this way you can exclude this files from git or any other version control utility

    default Linux way is this one in console before launching:
    export MYCOOLAPP_CONFIG="/home/tigra/mycoolapp/settings_production.py"

提交回复
热议问题