Постоянные ресурсы в приложении rails

#ruby-on-rails #singleton #persistent

#ruby-on-rails #синглтон #постоянные

Вопрос:

Во-первых, это может быть не самое лучшее название, но, похоже, на данный момент оно имеет смысл.

То, на что я смотрю, — это загрузка ресурса, который должен работать в течение срока службы веб-приложения. На более позднем этапе может потребоваться некоторая подготовка для обновления вручную, но в настоящее время это не так.

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

Я не хочу идти по пути yaml или другого механизма хранения, разрешения должны находиться в базе данных для других зависимостей. Тем не менее, в Rails какой был бы наиболее подходящий способ эффективной загрузки и чтения данных?

Ответ №1:

Это звучит как идеальное использование кэша

 permissions = Rails.cache.fetch( 'permissions' ) do
  # Permissions don't exist yet, perform long operation and load from DB
  load_permissions_from_db
end
  

Более подробная информация здесь.

Комментарии:

1. Будучи новичком в rails, я этого не видел, но мне нравится, как это выглядит. Я попробую это сделать, надеюсь, это сработает для моих нужд.

2. NP, мне пришлось пройти ту же кривую обучения. Обязательно проверьте railscasts.com для введения ко многим концепциям rails.

Ответ №2:

Я не совсем уверен, что вы имеете в виду, но я думаю, что есть несколько способов, которыми вы могли бы воспользоваться

  • кэширование (например, caches_page :page или caches_action :action в контроллере)
  • или, возможно, сохранение чего-либо в данных cookie / сеанса, конечно, я не совсем понимаю природу этих данных, поэтому я не знаю, что будет работать лучше, если вообще будет