2016-11-04 10 views
1

私はレールアプリで使用するためのルビーの宝石を開発しています。 Webサービスからのライブデータを使用して "初期化"する必要があります。ルビーの宝石にデータを保持する方法は?

しかし、この初期化は長いプロセスで、初期化データをどこかに保存したいと考えています。どこでそれを保存すべきですか?

私はそれを親レールのアプリケーションデータベースに保存できますが、テーブルと移行を作成する必要があり、これは理想的ではありません。

私は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、ok私はそれを明確にしました。 – Grey

0

gemの設定の一環としてマイグレーションを生成して実行します。実際に

これは非常に一般的である:(バージョンを格納するデータベース内のテーブルを必要とすること)(ユーザテーブル上の特定の列が必要)工夫又はpaper_trail等でよく知られている宝石を見て

一方あなたの選択肢は必ずしも実現可能ではありません。ユーザーがredisデータベースを設定することは期待できません(ほとんどのアプリケーションではレディスは使用されません)。また、Herokuなどの一部の環境ではファイルを永続的に書き込むことができません。

+0

おそらくsqliteデータベースですか?私は英雄を使用する必要はありません。 – Grey

+0

sqliteデータベースでは、ユーザーはデプロイスクリプトを変更する必要があります。デプロイスクリプトでは、新しいバージョンのアプリケーションをデプロイした後でもデータベースを使用できるようにする必要があります。さらに、Heroku(または読み込み専用のファイルシステム)を使用しない場合でも、あなたの宝石のユーザーは、そのようなシステムでそれを使いたいかもしれません。私はsqliteはオプションではないと思う。 – spickermann

関連する問題