我在我的应用程序中使用YAML进行配置。我使用configatron进行一般配置。但是我有私人配置值(account_id和密码)。
我可以在数据库中创建模型或在我的设置模型中创建一个新行。但是我更喜欢在yml上维护信息
我在config中创建my.yml然后在控制器上读取
yaml_config = YAML::load(ERB.new(IO.read(File.join(RAILS_ROOT, 'config', 'my.yml'))).result)[RAILS_ENV]
所以我想使用像configuratron gem那样的my.yml文件。
即我实际加载YAML并且我想配置my.field_information。
如果我表示不好意思
提前致谢
答案 0 :(得分:1)
我不确定我是否理解正确,但您希望能够使用属性访问您的配置?
然后你可以这样做:
class My
def initialize
@config = YAML::load(ERB.new(IO.read(
File.join(RAILS_ROOT, 'config', 'my.yml'))).result)[RAILS_ENV]
end
def method_missing(name, *args, &block)
@config[name.to_s]
end
end
这将允许您作为属性访问顶级字段。
例如,如果你的my.yml文件看起来像
development:
user: Me
password: Mine
然后您可以使用
访问它my_config = My.new
my_config.user
my_config.password
当然,这只是一个粗略的例子。如果文件中缺少某些属性,则应添加大量检查和错误处理。
答案 1 :(得分:0)
我刚刚在最后5分钟写了一些相关内容(包括检查yml是否缺失/无效):
mg_yml = YAML::load(File.open("#{RAILS_ROOT}/config/yyy.yml"))
if mg_yml
mg_yml_env = mg_yml.with_indifferent_access[RAILS_ENV]
if mg_yml_env
if mg_yml_env.with_indifferent_access[:password].blank?
flash[:error] = "<em>config/yyy.yml</em> missing password (blank / missing) for current environment. You cannot access yyy until you set the password for this environment."
else
@password_from_yml = mg_yml_env.with_indifferent_access[:password]
end
else
flash[:error] = "<em>config/yyy.yml</em> missing password for current environment '#{RAILS_ENV}'. You cannot access yyy until you configure this file for this environment."
end
else
flash[:error] = "<em>config/yyy.yml</em> missing. You cannot access yyy until you configure this file."
end
对于/ config目录中的yyy.yml:
development:
password: my_dev_pass
test:
password: my_test_pass
production:
password: my_production_pass