2016-11-04 89 views
1

我正在開發用於rails應用程序的ruby gem。 寶石需要使用來自web服務的實時數據「初始化」。如何在ruby gem中保存數據?

但是這個初始化是一個很長的過程,我想將初始化數據保存在某個地方。我應該在哪裏保存它?

我可以將它保存在父欄應用程序數據庫中,但是我需要創建表和遷移,這並不理想。

我正在考慮在gem文件夾中使用文本文件或redis數據庫......這是一個很好的做法嗎?

謝謝。

+0

請添加代碼片段。 – timmyRS

回答

1

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 
+0

但他們不是持久的,只有ActiveSupport :: Cache :: FileStore是持久的,我仍然需要一個位置來保存它... – Grey

+0

@Grey我看到了,但你說 - 「我想緩存初始化數據」 :-) – Stefan

+0

eheh,好吧,我澄清說。 – Grey

0

我認爲這是完全沒有指望用戶生成並運行遷移作爲您的寶石設置的一部分。

其實這是很常見的:看看著名的寶石樣色器件(即在用戶表需要一定的列)或paper_trail(需要在存儲版本的數據庫中的表)

在另一方面你的替代品並不總是可行的。你不能指望用戶配置redis數據庫(我的大多數應用程序根本不使用redis),並且某些環境(例如Heroku)不允許持久地寫入文件。

+0

也許是一個SQLite數據庫呢?我不會用英雄。 – Grey

+0

sqlite數據庫將要求用戶更改其部署腳本。部署腳本需要確保數據庫在部署新版本的應用程序後仍然可用。此外,即使您不使用Heroku(或其他只讀的文件系統),您的gem用戶也可能希望在此類系統上使用它。我認爲sqlite不是一個選項。 – spickermann