【问题标题】:How to access a yaml in rails config path如何在 Rails 配置路径中访问 yaml
【发布时间】:2012-09-27 18:47:27
【问题描述】:

我正在编写一个 ruby​​ gem,我想让用户使用您自己的 yaml 文件配置,但我不知道如何测试 user_config.yml 是否存在于 rails 配置路径中。
仅当此文件存在于配置路径中时,我才想使用 user_config.yml。

【问题讨论】:

    标签: ruby-on-rails ruby gem yaml


    【解决方案1】:

    Rails.root(或早期版本的 Rails 中的RAILS_ROOT)为您提供应用程序根目录的路径。从那里,您可以查看您感兴趣的文件是否存在。

    例如

    path = File.join(Rails.root, "config", "user_config.yml")
    if File.exists?(path)
      # do something
    end
    

    【讨论】:

    • 这些天你可能会使用Rails.root.join('config', 'user_config.yml')
    【解决方案2】:

    您可以使用数组类型的 $LOAD_PATH 变量访问 Rails 应用程序的加载路径。

    这样

    if $LOAD_PATH.include?('/path/where/user/should/put/their/user_config.yml')
      # EDIT
      config_options = File.new('rails_app/config/user_config.yml', 'r')
    else
      # EDIT
      config_options = File.new('path/to/default/config.yml', 'r')
    end
    

    Ruby File class 还有另一种有用的方法,称为#exists?这当然会检查文件是否存在。有关更多信息,请参阅文件类文档。

    希望这能让你开始。您的问题比较模糊,如果您需要更多帮助,请回复详细信息。

    【讨论】:

    • 抱歉,很难解释。如果我将 user_config.yml 放入配置路径 (rails_app/config/user_config.yml),我该如何访问该文件?我可以使用类似的东西:YAML.load_file("#{$LOAD_PATH}/config/user_config.yml")?
    • 正如我在原始答案中所说, $LOAD_PATH 变量是一个数组,因此您不想使用字符串插值。有关加载文件的建议,请参阅我的答案中的编辑。
    • @BrunnoDosSantos 要从您的 yaml 获取哈希,您确实可以使用 YAML 模块。 configs_hash = YAML.load_file("path/to/config.yml")[RAILS_ENV],其中RAILS_ENV 是“开发”、“测试”等。
    • 卢克,再次抱歉......但我想知道如何动态地使用“rails_app/config”。正如我所说,我在 gem 中编写这段代码,我不知道 rails_app 路径是什么。那是我想在我最初的问题中提出的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2014-02-06
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2016-02-26
    相关资源
    最近更新 更多