如何在 ruby gem 中持久化数据?

How to persist data in a ruby gem?

我正在开发 ruby gem 用于 rails 应用程序。 gem 需要 "initialize" 使用来自网络服务的实时数据。

但是这个初始化是一个漫长的过程,我想把初始化数据保存在某个地方。我应该把它保存在哪里?

我可以将它保存在父 rails 应用程序数据库中,但我需要创建表和迁移,这并不理想。

我正在考虑在 gem 文件夹中使用文本文件或 redis 数据库...这是一个好的做法吗?

谢谢。

ActiveSupport有几个Cache类。例如,您可以使用默认值 Rails.cache:

Rails.cache.write('my-gem-initialization-data', 'foo bar baz')

如果您需要更大的灵活性,您可以提供一个初始化程序,例如:

# config/initializers/my_gem.rb
MyGem.configure do |config|
  config.cache = Rails.cache
  config.cache_key = 'my-gem-initialization-data'
end

我认为期望用户生成并 运行 迁移作为 gem 设置的一部分是完全可以的。

事实上,这很常见:看看众所周知的 gem 之类的设计(需要用户的某些列 table)或 paper_trail(需要 table 在数据库中存储版本)

另一方面,您的替代方案并不总是可行的。你不能指望用户配置了 redis 数据库(我的大多数应用程序根本不使用 redis)并且某些环境(例如 Heroku)不允许持久写入文件。