新手问题 Figaro 支持层次配置吗?引用方式是什么?

diguage · 2014年02月10日 · 最后由 lulalala 回复于 2018年03月09日 · 2952 次阅读

我想使用 Figaro 做配置信息,在 application.yml 中写的配置如下:

配置信息

EMAIL:
  SMTP:
    ADDRESS: <<Address>>
    PORT: <<Port>>
    DOMAIN: <<Domain>>
    AUTHENTICATION: <<Auth>>
    USER_NAME: <<User Name>>
    PASSWORD: <<Password>>
    ENABLE_STARTTLS_AUTO: <<Starttls Auto>>
  DEFAULT_FROM_EMAIL: <<Default Email>>
  DEFAULT_URL: <<Default Url>>

引用以及错误

在 Console 下,如果引用``,没有问题:

2.0.0p353 :004 > Figaro.env.EMAIL
 => "{\"SMTP\"=>{\"ADDRESS\"=>\"<<Address>>\", \"PORT\"=><<Port>>, \"DOMAIN\"=>\"<<Domain>>\", \"AUTHENTICATION\"=>\"<<Auth>>\", \"USER_NAME\"=>\"<<User Name>>\", \"PASSWORD\"=><<Password>>, \"ENABLE_STARTTLS_AUTO\"=><<Starttls Auto>>}, \"DEFAULT_FROM_EMAIL\"=>\"<<Default Email>>\", \"DEFAULT_URL\"=>\"<<Default Url>>\"}"

如果引用Figaro.env.EMAIL.SMTP,则报错:

2.0.0p353 :005 > Figaro.env.EMAIL.SMTP
NoMethodError: undefined method `SMTP' for #<String:0x007fa1280ef940>
    from (irb):5
    from /Users/diguage/.rvm/gems/ruby-2.0.0-p353@rails402/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in `start'
    from /Users/diguage/.rvm/gems/ruby-2.0.0-p353@rails402/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in `start'
    from /Users/diguage/.rvm/gems/ruby-2.0.0-p353@rails402/gems/railties-4.0.2/lib/rails/commands.rb:62:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

如果引用Figaro.env.EMAIL.SMTP.ADDRESS,也会报上面一样的错误。

Figaro 不支持这种层次配置以及吗?还是我的引用方式不对?(我看网上的一些例子没见过这种层次配置配置的)

注:在群里询问这个问题时,一个朋友说,Figaro 的引用方式是ENV["xxx"]。我试了一下,两种都可以。

  1. 看官方 doc 是比较推荐用_来分割层级
  2. 目测你引用正确的结果 email 会得到一个 string 那肯定是无法继续层级了 所以如果你非要这么做,那么可以自己把这个 string cast 成一个 hash 去用

虽然有点晚了,但是做了一个类似的 gem,支援层次配置:)

https://ruby-china.org/topics/35192

需要 登录 后方可回复, 如果你还没有账号请 注册新账号