Rails. Класс предварительной загрузки в режиме разработки - PullRequest
2 голосов
/ 16 февраля 2011

Как правильно предварительно загрузить модель Rails в режиме разработки?

Справочная информация: Rails 2.2, memcahe в качестве хранилища кэша.

Когда Rails запускается в рабочем режиме, он в первую очередь предварительно загружает и кэширует все модели. В режиме разработки используется загрузка laizy. Вот почему мы сохраняем любую модель в кеше rails, например, Rails.cache.write ("key", User.find (0)) при следующей загрузке приложения, когда мы пытаемся сделать Rails.cache.read ("key" ) memcache сработал, что пользователь неизвестен класс / модуль. Как правильно предварительно загрузить класс в этой ситуации?

1 Ответ

3 голосов
/ 16 февраля 2011

Вы можете обойти это, выполнив что-то вроде этого:

User if Rails.env == 'development'
@user = Rails.cache.fetch("key"){ User.find(0) }

Это заставит пользовательскую модель перезагружаться перед оператором кэша.Если у вас есть класс с несколькими операторами кэша, вы можете сделать это:

class SomeController
  [User, Profile, Project, Blog, Post] if Rails.env == 'development'

  def show
    @user = Rails.cache.fetch("user/#{params[:user_id]") do
      User.find(params[:user_id])
    end
  end
end

Если вы находитесь в Rails 2.x и Rails.env не работает, вы всегда можете использовать RAILS_ENV или ENV ['RAILS_ENV']вместо.Конечно, ваш другой вариант - просто отключить кэширование в вашей среде разработки, тогда вам вообще не придется заниматься этой проблемой.

...