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

Ruby on rails 如何在ruby gem中持久化数据?,ruby-on-rails,ruby,persistence,Ruby On Rails,Ruby,Persistence,我正在开发一个用于rails应用程序的ruby gem。 gem需要使用来自webservice的实时数据进行“初始化” 但是这个初始化是一个很长的过程,我想把初始化数据保存在某个地方。我应该把它保存在哪里 我可以将其保存在父rails应用程序数据库中,但我需要创建表和迁移,这并不理想 我正在考虑在gem文件夹中使用文本文件或redis数据库。。。这是一种好的做法吗 谢谢。ActiveSupport有几个类。例如,您可以使用默认的Rails.cache: Rails.cache.write('m

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

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

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

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


谢谢。

ActiveSupport
有几个类。例如,您可以使用默认的
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,比如designe(需要用户表上的某些列)或paper_trail(需要数据库中的一个表来存储版本)


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

请添加代码段。但它们不是持久的,只有ActiveSupport::Cache::FileStore是持久的,我仍然需要一个位置来保存它…@Grey,我明白了,但你说“我想缓存初始化数据”:-)呃,好的,我澄清了这一点。@Grey我认为硬编码位置或缓存机制或依赖特定系统的存在(甚至不是文件系统,想想Heroku的文件系统)是一个糟糕的设计。初始化器方法将允许gem的用户设置适当的缓存存储,如果是
文件存储
,还可以设置位置。@Grey只是为了澄清一下:初始化器将进入Rails应用程序,而不是gem。那么可能是sqlite数据库?我不必使用heroku。sqlite数据库需要用户更改其部署脚本。部署脚本需要确保在部署新版本的应用程序后,数据库仍然可用。此外,即使您不使用Heroku(或其他只读文件系统),gem的用户也可能希望在这样的系统上使用它。我认为sqlite不是一个选项。