【问题标题】:Why is the Figaro gem working only if I use erb syntax?为什么 Figaro gem 仅在我使用 erb 语法时才有效?
【发布时间】:2014-03-31 15:26:20
【问题描述】:

我正在使用Figaro gem,但它仅在我访问config/database.yml 中的环境变量时才有效,如下所示:

<%= ENV["MYSQL_USERNAME"] %>

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

ENV["MYSQL_USERNAME"]

Figaro.env.mysql_username

有人知道这是为什么吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 erb


    【解决方案1】:

    Figaro Gem's 官方文档清楚地说明(请参阅“给我一个示例”部分)以下内容:

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

    经过进一步调查,我发现很少有人提出这方面的问题。 Steve Richert(拥有“laserlemon”Github id 的 Figaro Gem 的创建者)在 issue #70

    上说

    这是一个已知问题。我们使用 Rails 的标准钩子来初始化 Rails 初始化之前的 Figaro。不幸的是,这个钩子显然 在读取 database.yml 之后发生。试图绕过标准 钩子和绑定到 Rails 在其他地方的初始化引入了一个主机 新问题,并且很难解释每一个问题 加载 Rails 环境的情况。恐怕这个 在 Rails 提供更好的(并且 支持)钩子,费加罗可以绑...

    更新

    根据 pull request #100,database.yml 配置适用于最新版本的 Rails(如 4.0 和 4.1)和 Figaro。

    最后,我强烈推荐阅读 Taylor Mock 和 Daniel Kehoe 的 Rails Environment Variables 指南。这是所有 RoR 开发人员的必读之书。

    【讨论】:

    • 感谢所有有用的信息
    • +1 对答案和参考资料的真棒研究。干得好:)
    • 很高兴为您提供帮助。 @DanielKehoe 没问题。值得一提。继续努力。
    【解决方案2】:

    他们的文档是错误的。如果要将非静态值插入 YAML 文件,则必须使用 ERB 标签。 YAML 文件通常只是静态文件。 Rails 通过 ERB 解析器处理 database.yml,这就是为什么您可以使用 ERB 语法插入值。

    换句话说:如果您不使用 ERB 标签,Rails 不知道它是否应该评估您输入的内容,或者是否应该将其视为静态值。

    【讨论】:

    • 至少在我的情况下,Rails 将其视为plain text 而不使用 ERB 标签。感谢您的回答!
    • 请看我的回答。有一些很好的资源可能对您有用。我不是为了投票。
    【解决方案3】:

    如果您在ERB 文件中访问ENV["MYSQL_USERNAME"],那么显然您需要使用&lt;%= %&gt; 来评估和打印评估的ruby 代码。

    如果你简单地使用 ENV["MYSQL_USERNAME"] 而没有 &lt;%= %&gt; 那么它不会被 ERB 模板引擎解释。它将被视为plain text

    编辑

    您的问题没有指定您最初访问ENV["MYSQL_USERNAME"] 的位置(它是在对我的答案发表评论后添加的)这就是为什么我认为它在 ERB 文件中。 在任何.rb 文件中,您无需在访问ENV 时指定&lt;%= %&gt;。但是您确实需要指定它们以在 .yml.erb 文件中访问。

    【讨论】:

    • 这都在默认的config/database.yml里面
    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 2011-11-07
    • 2022-10-26
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2017-09-06
    相关资源
    最近更新 更多