簡體   English   中英

Python 應用配置最佳實踐

[英]Python app configuration best practices

我知道之前已經討論過這個問題,但我正在努力尋找有關如何在本地開發和生產服務器之間進行配置的直白解釋。

到目前為止我做了什么:我有一個my_app_config.py文件,其中有一個包含機器/場景(測試與生產)部分的部分,我可以注釋掉。 我將使用硬編碼的本地機器路徑、測試數據庫連接字符串、我的測試電子表格位置等進行開發。當需要將代碼部署到服務器時,我將“測試”部分注釋掉並取消“生產部分”的注釋。 正如您可能猜到的,這是錯誤的。

我最近采用了 Python ConfigParser 庫來使用.ini文件。 現在,我的代碼中有以下幾行

import ConfigParser
config = ConfigParser.RawConfigParser()
config.read(os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'settings',
                                                     'my_app_config.ini')))
database_connect_string_admin = config.get('Database', 'admin_str')

這方面的問題很多...

  1. 我需要在每個文件的頂部導入
  2. 文件名my_app_config.ini不能更改。 因此,我依靠.ini文件內容中的注釋來了解我正在處理哪個文件。 它們存儲在文件夾樹中,所以我知道哪個是哪個。
  3. 注意配置文件的路徑是在這里定義的。 因此,根據 python 文件在樹結構中的位置決定我是否收到復制/粘貼錯誤。

我試圖在程序開始時設置環境變量,但所有模塊的所有導入都在代碼啟動時立即執行。 我左右收到“未找到”錯誤。

我想要什么:了解如何將所有配置保存在一個不容易忘記我在做什么的地方。 我想要一種簡單的方法來將這些配置文件(最好是一個文件或腳本)置於版本控制之下(安全性是另一個問題,我離題了)。 我希望能夠無縫切換上下文(本地測試、本地生產、serverA-test、serverA-production、serverB-test、serverB-production)我的應用程序使用

  1. 我的解析器讀取的my_app_config.ini
  2. uwsgi.ini應用服務器皇帝讀取的uwsgi.ini
  3. web_config.py應用程序使用的web_config.py
  4. nginx.conf鏈接到 Web 服務器的配置
  5. celery配置

更不用說所有東西的不同路徑(最好在魔法配置處理精靈中處理)。 我想一旦我弄清楚了這一點,我會為花了這么長時間才掌握的尷尬。

環境變量是我在這里嘗試做的嗎?

你必須嘗試`simple-settings 它會解決你所有的問題。 一種設置環境變量的方法

開發中

$ export SIMPLE_SETTINGS=settings.general,settings.development
$ python app.py

生產中

$ export SIMPLE_SETTINGS=settings.general,settings.production
$ python app.py

出於安全原因,您可以將“development.py” and production.py”保留在存儲庫中。

例子

設置/general.py

SIMPLE_CONF = 'simple'

應用程序

from simple_settings import settings

print(settings.SIMPLE_CONF)

該文檔指出了更多的功能和優點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM