Apabila kami menulis kod, kami biasanya membangunkannya pada komputer kami sendiri dan kemudian menggunakan kod itu ke pelayan. Jika sekeping kod melibatkan membaca dan menulis pangkalan data, atau mengakses beberapa antara muka perkhidmatan dalam talian yang lain, maka semasa pembangunan, untuk tidak menjejaskan persekitaran dalam talian, kami biasanya memisahkan pangkalan data dalam persekitaran ujian dan pangkalan data dalam persekitaran dalam talian.
Sebagai contoh, program kami perlu mengakses MongoDB dan Redis, jadi dalam kod, kami mungkin menulis seperti ini:
import pymongo import redis handler = pymongo.MongoClient('mongodb://username:password@127.0.0.1:27017').db.col client = redis.Redis(host='127.0.0.1', port=6379, password='xxxx')
Apabila anda ingin menggunakan program ke persekitaran dalam talian, anda menukar parameter sambungan MongoDB dan parameter sambungan Redis secara manual dalam kod kepada parameter persekitaran dalam talian. Kemudian serahkan kod ke Git, tarik kod terkini pada pelayan dan gunakannya.
Walau bagaimanapun, apabila anda ingin mengubah suai fungsi baharu dan mengujinya semula, anda perlu mengubah suai parameter sambungan ini kepada parameter persekitaran ujian dan beroperasi pada komputer anda sendiri. Jika anda terlupa untuk mengubah suai dan menjalankan terus, data kotor mungkin ditulis ke persekitaran dalam talian.
Jadi, seseorang boleh menggunakan pembolehubah persekitaran untuk mengawal parameter baca, contohnya:
import os import redis import pymongo if os.getenv('env', 'prod'): # 线上环境 MONGODB_URI = 'mongodb://username:password@xx.xx.xx.xx:27017' REDIS_PARAMS = {'host': 'xx.xx.xx.xx', 'port': 6379, 'password': 'xxxx'} else: # 测试环境 MONGODB_URI = 'mongodb://username:password@127.0.0.1:27017' REDIS_PARAMS = {'host': '127.0.0.1', 'port': 6379, 'password': 'xxxx'} handler = pymongo.MongoClient(MONGODB_URI).db.col client = redis.Redis(**REDIS_PARAMS)
Dengan cara ini, anda tidak perlu mengubah suai parameter sambungan pangkalan data secara manual selagi anda menetapkan pembolehubah persekitaran env
persekitaran dalam talian kepada prod
, maka program akan digunakan ke dalam. persekitaran dalam talian dan ia akan menggunakan pangkalan data dalam talian secara automatik. Selagi pembolehubah persekitaran env
tidak prod
atau tidak wujud di tempat lain, seperti pada komputer anda, parameter persekitaran pembangunan akan digunakan secara automatik.
Melakukan ini mengelakkan masalah yang disebabkan oleh terlupa untuk mengubah suai parameter, tetapi terdapat masalah lain: jika orang lain juga mempunyai akses kepada sumber Git ini, maka mereka akan tahu cara menyambung ke pangkalan data dalam persekitaran dalam talian. Mereka juga memanipulasi data dalam persekitaran dalam talian tanpa kebenaran, menyebabkan risiko keselamatan atau kebocoran privasi.
Untuk keselamatan yang lebih baik, anda boleh menggunakan fail khas untuk menyimpan parameter konfigurasi dan program membaca parameter daripada fail. Fail persekitaran dalam talian mengandungi parameter dalam talian, dan fail persekitaran pembangunan mengandungi parameter pembangunan. Fail konfigurasi ini tidak dimuat naik ke Git.
Sebagai contoh, kami mencipta fail config.json dengan kandungan:
{ "MONGODB_URI": "mongodb://username:password@127.0.0.1:27017", "REDIS_PARAMS": {"host": "127.0.0.1", "port": 6379, "password": "xxxx"} }
Kemudian kod kami diubah suai seperti ini:
import os import json import redis import pymongo CONFIG_PATH = '/etc/config/config.json' if not os.path.exists(CONFIG_PATH): print('配置文件不存在,自动使用测试环境参数!') MONGODB_URI = 'mongodb://username:password@127.0.0.1:27017' REDIS_PARAMS = {'host': '127.0.0.1', 'port': 6379, 'password': 'xxxx'} else: with open(CONFIG_PATH, encoding='utf-8') as f: config = json.load(f) MONGODB_URI = config['MONGODB_URI'] REDIS_PARAMS = config["REDIS_PARAMS"] handler = pymongo.MongoClient(MONGODB_URI).db.col client = redis.Redis(**REDIS_PARAMS)
Atas ialah kandungan terperinci Bagaimana untuk menetapkan dengan betul parameter konfigurasi persekitaran pembangunan dan persekitaran pengeluaran mongodb dan redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!