Ruby项目无Rails凭证时将YAML转为ENV变量的实现方法
纯Ruby项目中用YAML配置生成全局ENV变量的实现方法
完全可以做到,不需要依赖Rails credentials,用Ruby标准库就能实现。以下是具体步骤和代码示例:
1. 准备YAML配置文件
假设你的配置文件路径为config/environments.yml,内容如下:
dev: url: google.com user: dev_user password: dev_password test: url: google.com user: test_user password: test_password
2. 编写配置加载脚本
创建config/load_env.rb脚本,负责读取YAML并将配置注入全局ENV:
require 'yaml' # 读取YAML配置文件,用绝对路径避免相对路径问题 config_path = File.expand_path('../environments.yml', __FILE__) env_settings = YAML.load_file(config_path) # 指定当前环境:优先读取系统环境变量,默认用test current_env = ENV['APP_ENV'] || 'test' # 将对应环境的配置项转为大写键名,注入全局ENV env_settings[current_env].each do |key, value| ENV[key.upcase] = value.to_s end
3. 在项目启动时加载脚本
因为是Rspec Capybara项目,直接在spec_helper.rb开头引入这个脚本,确保所有测试代码都能访问到ENV变量:
# spec_helper.rb require_relative 'config/load_env' # 其他Rspec、Capybara配置代码...
4. 使用配置
在测试代码里,直接通过ENV全局变量调用配置项即可:
# 示例测试代码 describe '环境配置读取' do it '能获取test环境的配置参数' do expect(ENV['URL']).to eq('google.com') expect(ENV['USER']).to eq('test_user') end end
注意事项
- 切换环境时,只需在运行命令前指定环境变量,比如:
APP_ENV=dev bundle exec rspec - 务必将
environments.yml添加到.gitignore,避免敏感信息泄露 - 如果YAML里有非字符串类型的配置(比如数字),
to_s会自动转换为字符串,不影响使用
内容的提问来源于stack exchange,提问作者user3636388
相关产品推荐
相关产品推荐

