224 lines
5.3 KiB
Markdown
224 lines
5.3 KiB
Markdown
|
|
# 配置系统迁移指南
|
||
|
|
|
||
|
|
## 概述
|
||
|
|
|
||
|
|
本文档指导您从旧的配置系统迁移到新的分层配置管理系统。
|
||
|
|
|
||
|
|
## 迁移前准备
|
||
|
|
|
||
|
|
### 1. 备份当前配置
|
||
|
|
```bash
|
||
|
|
# 备份当前的配置文件
|
||
|
|
cp src/flask_prompt_master/config.py src/flask_prompt_master/config.py.backup
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 安装新依赖
|
||
|
|
```bash
|
||
|
|
pip install python-dotenv==1.0.0
|
||
|
|
```
|
||
|
|
|
||
|
|
## 迁移步骤
|
||
|
|
|
||
|
|
### 第一步:环境变量设置
|
||
|
|
|
||
|
|
1. **复制环境变量示例文件**
|
||
|
|
```bash
|
||
|
|
cp env.example .env
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **编辑 .env 文件**
|
||
|
|
根据您的实际环境设置以下必需的环境变量:
|
||
|
|
```bash
|
||
|
|
# Flask基础配置
|
||
|
|
SECRET_KEY=your-actual-secret-key
|
||
|
|
FLASK_ENV=development
|
||
|
|
|
||
|
|
# 数据库配置
|
||
|
|
DATABASE_URL=mysql+pymysql://username:password@localhost:3306/database_name?charset=utf8mb4
|
||
|
|
|
||
|
|
# OpenAI兼容API配置
|
||
|
|
LLM_API_URL=https://api.deepseek.com/v1
|
||
|
|
LLM_API_KEY=your-actual-api-key
|
||
|
|
|
||
|
|
# 微信小程序配置
|
||
|
|
WX_APPID=your-actual-wx-appid
|
||
|
|
WX_SECRET=your-actual-wx-secret
|
||
|
|
```
|
||
|
|
|
||
|
|
### 第二步:验证配置
|
||
|
|
|
||
|
|
1. **测试配置系统**
|
||
|
|
```bash
|
||
|
|
# 设置环境变量
|
||
|
|
export FLASK_ENV=development
|
||
|
|
|
||
|
|
# 测试配置加载
|
||
|
|
python -c "from config import get_config; print('配置系统正常')"
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **测试应用启动**
|
||
|
|
```bash
|
||
|
|
python -c "from src.flask_prompt_master import create_app; app = create_app(); print('应用创建成功')"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 第三步:更新代码引用
|
||
|
|
|
||
|
|
#### 1. 应用初始化文件
|
||
|
|
旧代码:
|
||
|
|
```python
|
||
|
|
from src.flask_prompt_master.config import Config
|
||
|
|
|
||
|
|
def create_app(config_class=Config):
|
||
|
|
app = Flask(__name__)
|
||
|
|
app.config.from_object(config_class)
|
||
|
|
```
|
||
|
|
|
||
|
|
新代码:
|
||
|
|
```python
|
||
|
|
from config import get_config
|
||
|
|
|
||
|
|
def create_app(config_class=None):
|
||
|
|
if config_class is None:
|
||
|
|
config_class = get_config()
|
||
|
|
app = Flask(__name__)
|
||
|
|
app.config.from_object(config_class)
|
||
|
|
config_class.init_app(app)
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 2. 路由文件中的配置引用
|
||
|
|
旧代码:
|
||
|
|
```python
|
||
|
|
from src.flask_prompt_master.config import Config
|
||
|
|
|
||
|
|
client = OpenAI(api_key=Config.LLM_API_KEY, base_url=Config.LLM_API_URL)
|
||
|
|
```
|
||
|
|
|
||
|
|
新代码:
|
||
|
|
```python
|
||
|
|
def get_openai_client():
|
||
|
|
return OpenAI(
|
||
|
|
api_key=current_app.config['LLM_API_KEY'],
|
||
|
|
base_url=current_app.config['LLM_API_URL']
|
||
|
|
)
|
||
|
|
|
||
|
|
client = get_openai_client()
|
||
|
|
```
|
||
|
|
|
||
|
|
### 第四步:环境切换测试
|
||
|
|
|
||
|
|
1. **开发环境**
|
||
|
|
```bash
|
||
|
|
export FLASK_ENV=development
|
||
|
|
python run_dev.py
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **测试环境**
|
||
|
|
```bash
|
||
|
|
export FLASK_ENV=testing
|
||
|
|
python -m pytest tests/
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **生产环境**
|
||
|
|
```bash
|
||
|
|
export FLASK_ENV=production
|
||
|
|
# 确保设置了所有必需的环境变量
|
||
|
|
python run_dev.py
|
||
|
|
```
|
||
|
|
|
||
|
|
## 配置项对比
|
||
|
|
|
||
|
|
### 旧配置系统
|
||
|
|
```python
|
||
|
|
class Config:
|
||
|
|
SECRET_KEY = 'dev-key'
|
||
|
|
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/pro_db?charset=utf8mb4'
|
||
|
|
LLM_API_KEY = 'sk-fdf7cc1c73504e628ec0119b7e11b8cc'
|
||
|
|
WX_APPID = 'wx2c65877d37fc29bf'
|
||
|
|
WX_SECRET = '89aa97dda3c1347c6ae3d6ab4627f1f4'
|
||
|
|
```
|
||
|
|
|
||
|
|
### 新配置系统
|
||
|
|
```python
|
||
|
|
# 环境变量设置
|
||
|
|
SECRET_KEY=your-secret-key
|
||
|
|
DATABASE_URL=mysql+pymysql://username:password@localhost:3306/database_name?charset=utf8mb4
|
||
|
|
LLM_API_KEY=your-api-key
|
||
|
|
WX_APPID=your-wx-appid
|
||
|
|
WX_SECRET=your-wx-secret
|
||
|
|
```
|
||
|
|
|
||
|
|
## 常见问题解决
|
||
|
|
|
||
|
|
### 1. 环境变量未设置错误
|
||
|
|
**错误信息:** `ValueError: SECRET_KEY 环境变量未设置`
|
||
|
|
|
||
|
|
**解决方案:**
|
||
|
|
- 确保 `.env` 文件存在且包含所有必需的环境变量
|
||
|
|
- 检查环境变量名称是否正确
|
||
|
|
- 确保 `python-dotenv` 已安装
|
||
|
|
|
||
|
|
### 2. 配置类导入错误
|
||
|
|
**错误信息:** `ModuleNotFoundError: No module named 'config'`
|
||
|
|
|
||
|
|
**解决方案:**
|
||
|
|
- 确保在项目根目录下运行命令
|
||
|
|
- 检查 `config/` 目录是否存在
|
||
|
|
- 确保 `config/__init__.py` 文件存在
|
||
|
|
|
||
|
|
### 3. 跨域配置错误
|
||
|
|
**错误信息:** `ValueError: 生产环境必须设置 CORS_ORIGINS 环境变量`
|
||
|
|
|
||
|
|
**解决方案:**
|
||
|
|
- 在生产环境中设置 `CORS_ORIGINS` 环境变量
|
||
|
|
- 或者修改生产环境配置使用默认值
|
||
|
|
|
||
|
|
## 迁移检查清单
|
||
|
|
|
||
|
|
- [ ] 备份旧配置文件
|
||
|
|
- [ ] 安装新依赖包
|
||
|
|
- [ ] 创建 `.env` 文件并设置环境变量
|
||
|
|
- [ ] 更新应用初始化代码
|
||
|
|
- [ ] 更新路由文件中的配置引用
|
||
|
|
- [ ] 测试开发环境配置
|
||
|
|
- [ ] 测试测试环境配置
|
||
|
|
- [ ] 测试生产环境配置
|
||
|
|
- [ ] 验证所有功能正常工作
|
||
|
|
- [ ] 删除旧配置文件
|
||
|
|
|
||
|
|
## 回滚方案
|
||
|
|
|
||
|
|
如果迁移过程中出现问题,可以快速回滚:
|
||
|
|
|
||
|
|
1. **恢复旧配置**
|
||
|
|
```bash
|
||
|
|
cp src/flask_prompt_master/config.py.backup src/flask_prompt_master/config.py
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **恢复旧的应用初始化代码**
|
||
|
|
```python
|
||
|
|
from src.flask_prompt_master.config import Config
|
||
|
|
|
||
|
|
def create_app(config_class=Config):
|
||
|
|
app = Flask(__name__)
|
||
|
|
app.config.from_object(config_class)
|
||
|
|
return app
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **恢复旧的路由配置引用**
|
||
|
|
```python
|
||
|
|
from src.flask_prompt_master.config import Config
|
||
|
|
|
||
|
|
client = OpenAI(api_key=Config.LLM_API_KEY, base_url=Config.LLM_API_URL)
|
||
|
|
```
|
||
|
|
|
||
|
|
## 总结
|
||
|
|
|
||
|
|
新的配置系统提供了以下优势:
|
||
|
|
|
||
|
|
1. **环境分离**:不同环境使用不同的配置
|
||
|
|
2. **安全性提升**:敏感信息通过环境变量管理
|
||
|
|
3. **可维护性增强**:配置结构清晰,易于管理
|
||
|
|
4. **部署简化**:标准化的环境切换机制
|
||
|
|
|
||
|
|
完成迁移后,您的应用将具有更好的配置管理能力和安全性。
|