Эффективно ли загружать файл YAML как константу в мой контроллер Rails? - PullRequest
3 голосов
/ 22 марта 2012

У меня есть пара больших массивов, которые должны быть доступны для определенного вида.В настоящее время я храню их в файлах YAML и загружаю в константы контроллера, как показано ниже.

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

class OnboardingController < ApplicationController

  BRANDS = YAML.load(File.open("#{Rails.root}/config/brands.yml", 'r'))
  STORES = YAML.load(File.open("#{Rails.root}/config/stores.yml", 'r'))

  # ...

Ответы [ 2 ]

6 голосов
/ 22 марта 2012

Я предполагаю, что эта константа сохраняется в памяти при загрузке Rails файл при настройке среды

Да, когда файл загружен / требуется, все там выполняется и назначен. Поэтому он загружается только один раз.

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

Частично верно, в режиме разработки константы сбрасываются с каждым запрос, но это не должно иметь значения при производстве.

Может кто-нибудь предложить лучшие практики в этой области?

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

6 голосов
/ 22 марта 2012

Вы можете лениво загрузить его

class OnboardingController < ApplicationController  
  def brand_values
    @@brand_values ||= YAML.load((File.open("#{Rails.root}/config/brands.yml", 'r'))
  end

  def stores_values
    @@stores_values ||= YAML.load((File.open("#{Rails.root}/config/stores.yml", 'r'))
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...