摘要:單一配置擼起袖子,開始吧,新建文件夾,內部建立這樣的文件結構其中內容如下代碼示例中開啟了模式,假設我們需要通過配置文件來實現控制服務的模式開啟與否,那該怎么實現呢。
配置
對于一個項目來說,配置是一個很嚴肅的問題,比如說:在開發環境和生產環境中,配置是不同的,那么一個項目該如何自由地在不同的配置環境中進行切換呢,思考下,然后帶著答案或者疑問往下閱讀。
單一配置擼起袖子,開始吧,新建文件夾 demo2 ,內部建立這樣的文件結構:
demo02 ├── config │?? ├── __init__.py │?? └── config.py └── run.py
其中 run.py 內容如下:
#!/usr/bin/env python from sanic import Sanic from sanic.response import text app = Sanic() @app.route("/") async def test(request): return text("Hello World!") if __name__ == "__main__": app.run(host="0.0.0.0", port=8000, debug=True)
代碼示例中開啟了 debug 模式,假設我們需要通過 config.py 配置文件來實現控制服務的 debug 模式開啟與否,那該怎么實現呢。
在 config.py 中添加一行:DEBUG=True ,然后 run.py 內容改為:
#!/usr/bin/env python from sanic import Sanic from sanic.response import text from config import DEBUG app = Sanic() @app.route("/") async def test(request): return text("Hello World!") if __name__ == "__main__": app.run(host="0.0.0.0", port=8000, debug=DEBUG)
表面上看,功能確實實現了,但這實際上卻不是很好的做法,若部署在生產環境中,難道還要特地再將 debug 改為 False 么,這顯然很浪費時間,如果需要改變的參數有很多,那就很難維護了。
多配置那么,正確的做法應該是怎么樣的呢?
我們應當依據不同的環境來編寫各自對應的環境,舉個例子,比如生產環境就對應pro_config,開發環境就對應dev_config.py等等
具體該怎么實施?首先在文件夾 demo2 ,內部建立這樣的文件結構:
demo02 ├── config │?? ├── __init__.py │?? ├── config.py │?? ├── dev_config.py │?? └── pro_config.py └── run.py
然后使用類繼承的方式使這三個配置文件聯系起來,比如在 config.py 中就只放公有配置,如:
#!/usr/bin/env python import os class Config(): """ Basic config for demo02 """ # Application config TIMEZONE = "Asia/Shanghai" BASE_DIR = os.path.dirname(os.path.dirname(__file__))
而在 pro_config.py或dev_config.py 中就可以自由地編寫不同的配置了:
# dev_config #!/usr/bin/env python from .config import Config class DevConfig(Config): """ Dev config for demo02 """ # Application config DEBUG = True # pro_config #!/usr/bin/env python from .config import Config class ProConfig(Config): """ Pro config for demo02 """ # Application config DEBUG = False
配置文件還需要根據系統環境變量的設置進行不同配置環境的切換,比如設置 MODE 系統環境變量,這里從系統環境變量得到配置也是個不錯的方法,一般說利用gunicorn配置worker數目之類的,都可以使用這種方案。
然后可以根據其不同的值切換到不同的配置文件,因此在 __init__.py 中需要這么寫:
#!/usr/bin/env python import os def load_config(): """ Load a config class """ mode = os.environ.get("MODE", "DEV") try: if mode == "PRO": from .pro_config import ProConfig return ProConfig elif mode == "DEV": from .dev_config import DevConfig return DevConfig else: from .dev_config import DevConfig return DevConfig except ImportError: from .config import Config return Config CONFIG = load_config()
默認 MODE 設置為 DEV,在 run.py 文件中就可以這么調用:
#!/usr/bin/env python from sanic import Sanic from sanic.response import text from config import CONFIG app = Sanic() app.config.from_object(CONFIG) @app.route("/") async def test(request): return text("Hello World!") if __name__ == "__main__": app.run(host="0.0.0.0", port=8000, debug=app.config["DEBUG"])
而在生產環境的服務器上,直接通過設置系統變量就可以達到配置修改的目的了,如下:
# 通過設置MODE的值進行配置文件的選擇 export MODE=PRO
若是利用 supervisor 來啟動服務,可通過添加environment = MODE="PRO" 來設置環境變量,是不是很方便呢。
說明其實我編寫這種微服務,配置更新是很正常且很頻繁的需求,這樣的話我就必須要求我的代碼可以實現熱更新,也就是可以迅速的修改配置,且迅速的生效,目前我使用的是ZooKeeper來實現這個需求,有興趣的朋友可以詳細了解,或許你也是用這個方案呢?
如果你有更好的方案,不妨告知一二。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42409.html
摘要:快速開始在安裝之前在支持異步的過程中,都經歷了哪些比較重大的更新。踏出第一步我們將正式使用來構建一個項目,讓我們踏出第一步,利用來編寫一個返回字符串的服務程序。本次示例的源代碼全部在上,見。 快速開始 在安裝Sanic之前,讓我們一起來看看Python在支持異步的過程中,都經歷了哪些比較重大的更新。 首先是Python3.4版本引入了asyncio,這讓Python有了支持異步IO的標...
摘要:簡介是一款用寫的,用法和類似,的特點是非常快官網速度比較框架實現基礎每秒請求數平均時間安裝環境創建文件,寫入下面的內容運行是不是看起來和一樣屬性上傳文件列表數據數據表單數據例子路由和差不多,一看就懂注冊中間件異常處 簡介 sanic是一款用python3.5+寫的web framework,用法和flask類似,sanic的特點是非常快github官網:https://github.c...
摘要:詳細信息可以看下這個問題先在說下我的部署方式使用部署配置文件啟動方式總結試用了下,把之前的一個聊天機器人從改成了。預告下一篇將介紹如何使用一步一步創建一個聊天機器人。 簡介 Sanic 是一個和類Flask 的基于Python3.5+的web框架,它編寫的代碼速度特別快。除了像Flask 以外,Sanic 還支持以異步請求的方式處理請求。這意味著你可以使用新的 async/await ...
摘要:實例實例測試結果增加路由實例測試結果提供了一個方法,根據處理程序方法名生成。異常拋出異常要拋出異常,只需從異常模塊中提出相應的異常。 typora-copy-images-to: ipic [TOC] 快速開始 在安裝Sanic之前,讓我們一起來看看Python在支持異步的過程中,都經歷了哪些比較重大的更新。 首先是Python3.4版本引入了asyncio,這讓Python有了支...
摘要:前端一種新一代高性能全棧開發實踐背景本項目將使用配合最簡單的邏輯來展示一個基于的全新一代高性能全棧開發實踐的為什么是對于為何不是等著名框架,或許可能很多人會產生疑惑,本身和非常的相似,而它的出現,不僅是大大改進過去時代性能低下通病,外加配 SanicCRUD-vue Sanic + 前端MVVM 一種新一代Python高性能全棧開發實踐showImg(https://segmentfa...
閱讀 2270·2023-04-25 23:15
閱讀 1927·2021-11-22 09:34
閱讀 1557·2021-11-15 11:39
閱讀 961·2021-11-15 11:37
閱讀 2156·2021-10-14 09:43
閱讀 3498·2021-09-27 13:59
閱讀 1509·2019-08-30 15:43
閱讀 3468·2019-08-30 15:43