为什么Figaro gem只有在我使用erb语法时才能工作?

Dan*_*ero 3 ruby-on-rails erb ruby-on-rails-4

我正在使用Figaro gem但它只在我访问内部的env变量时才有效config/database.yml:

<%= ENV["MYSQL_USERNAME"] %>
Run Code Online (Sandbox Code Playgroud)

但不是当我按照文档指定的方式尝试时:

ENV["MYSQL_USERNAME"]
Run Code Online (Sandbox Code Playgroud)

要么

Figaro.env.mysql_username
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

Hac*_*rma 7

Figaro Gem的官方文档明确说明(参见"给我一个例子"部分)以下内容:

注意: Figaro使用Rails的标准钩子进行初始化.不幸的是,这个钩子显然发生在读取database.yml之后.由于此问题,在application.yml中创建的环境变量在database.yml中不起作用.

在进一步调查后,我发现有关此事的问题很少.Steve Richert(Figaro Gem的创始人,带有"laserlemon"Github id)在问题#70上说这个

这是一个已知的问题.在Rails初始化之前,我们使用Rails的标准钩子来初始化Figaro.不幸的是,这个钩子显然发生在读取database.yml之后.试图绕过标准的钩子并与其他地方的Rails初始化相结合会引入许多新问题,并且很难解决加载Rails环境的每种情况.我担心这会落入"无法修复"的桶中,直到Rails提供了一个更好(并且支持)的钩子,而且这个钩子可以与费加罗结合在一起......

更新:

根据pull请求#100,database.yml config正在使用两个Rails(如4.0和4.1)和Figaro的最新版本.

最后,我强烈推荐阅读 Taylor Mock和Daniel Kehoe撰写的Rails环境变量指南.这是所有RoR开发人员必读的内容.