【问题标题】:can I get a data from file only one time in my gem similar to config/initializers in rails?我可以在我的 gem 中只从文件中获取一次数据,类似于 rails 中的 config/initializers 吗?
【发布时间】:2015-11-23 07:06:28
【问题描述】:

我有一个 Yml 文件需要 My Gem 从 Consuming 应用程序或我的 gem 本身读取。而不是读取每个请求,这会增加 IO 请求的数量。我想要类似于 config/Initializers/constant.rb 的东西,我曾经在服务器启动时只获取一次数据。

我在 ruby​​ gem 中尝试过同样的事情。我创建了一个 ruby​​ 文件 configuration.rb 并将数据存储为全局数据。它工作正常。

class ConfigurationData
  DATA = YAML.load(File.open(File.join('config','fallback_data','data.yml')))
end

问题:有更好的方法吗?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    执行此操作的正确位置是在初始化程序文件中。所以添加一个新文件到config/initializers。从那里你可以像这样加载你的配置文件:

    DATA = YAML.load_file(Rails.root.join('/config/fallback_data/data.yml'))[Rails.env]
    

    DATA 将在应用程序上下文中可用:

    data_from_file = DATA['one_of_the_keys']
    

    当您想在 gem 中执行此操作时,所有这些看起来都有些不同。当 Rails 加载 gem 时,它会从 init.rb 文件开始。您可以从那里加载配置文件。

    如果您想从 Rails 应用程序中的 gem 创建一个新的初始化程序,您需要将生成器添加到您的 gem。看看this的问题。

    【讨论】:

    • 通过阅读您提供的链接中的答案,它将 gem 初始化程序文件复制到 Rails 应用程序初始化程序正确。
    • 我有一个疑问。您在此处提到的 init.rb 是 gem 中的隐藏文件或类似于 twiiter_credentials.rb 的文件。
    • 我没有写过关于隐藏文件的文章。 init.rb 和提到的问题是两种不同的鞋子。
    猜你喜欢
    • 2020-09-15
    • 2012-09-06
    • 2011-12-21
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多