如何在ruby gem中保存数据?

我正在开发一个用于rails应用程序的ruby gem。 gem需要使用来自Web服务的实时数据“初始化”。

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

我可以将它保存在父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的设置的一部分是完全正确的。

实际上这很常见:查看众所周知的gems,例如devise(需要在users表上的某些列)或paper_trail(需要数据库中的表来存储版本)

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