2016-11-04 13 views
1

Я разрабатываю рубиновый камень для использования в приложении rails. Драгоценный камень необходимо «инициализировать» с использованием живых данных из веб-службы.Как сохранить данные в рубиновой драгоценности?

Но эта инициализация - это долгий процесс, и я хочу где-то сохранить данные инициализации. Где я должен его сохранить?

Я мог бы сохранить его в базе данных приложений родительских рельсов, но мне нужно будет создавать таблицы и миграции, и это не идеально.

Я думаю об использовании текстового файла или базы данных redis внутри папки gem ... Является ли это хорошей практикой?

Спасибо.

+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

Я считаю, что это совершенно нормально ожидать пользователю для создания и запуска миграции как части настройки вашего драгоценного камня.

На самом деле это довольно часто: Посмотрите на хорошо известные драгоценные камни, как завещанию (который нуждается в определенных столбцах в таблице пользователей) или paper_trail (которая нуждается в таблице в базе данных для хранения версий)

С другой стороны, ваши альтернативы не всегда возможны. Вы не можете ожидать, что у пользователя будет настроена база данных redis (большинство моих приложений не используют redis вообще), и некоторые среды (например, Heroku) не позволяют постоянно писать файлы.

+0

Может быть, база данных sqlite? Мне не придется использовать героку. – Grey

+0

База данных sqlite потребует от пользователя изменения сценариев развертывания. В сценарии развертывания необходимо убедиться, что база данных по-прежнему доступна после развертывания новой версии приложения. Кроме того, даже если вы не используете Heroku (или другую файловую систему, которая только для чтения), пользователь вашего драгоценного камня может захотеть использовать его в такой системе. Я думаю, что sqlite не вариант. – spickermann

 Смежные вопросы

  • Нет связанных вопросов^_^