如何在 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)不允许持久写入文件。
我正在开发 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)不允许持久写入文件。