#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 / сеанса, конечно, я не совсем понимаю природу этих данных, поэтому я не знаю, что будет работать лучше, если вообще будет