Модели ActiveRecord кешируются в граблях? - PullRequest
6 голосов
/ 19 мая 2009

Я знаю, что в rails 2.3.2 запросы ActiveRecord кэшируются, то есть вы можете увидеть что-то в журнале разработки / производства:

CACHE (0.0ms)   SELECT * FROM `users` WHERE `users`.`id` = 1

Мне было интересно, применяются ли те же принципы к рейковым задачам.

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

Кроме того, есть ли способ просмотреть sql-запросы, выполняемые во время задачи rake? Аналогично журналу разработки / производства

Ответы [ 3 ]

3 голосов
/ 16 декабря 2014

Кэш SQL не включен по умолчанию для задач rake. Вы можете поместить свой код в блок кеша, например так:

task :foobar => :environment do
  ActiveRecord::Base.connection.cache do
    User.find 1 # Will hit the db
    User.find 1 # Will hit the cache
  end
end

Это, по сути, то, что Rails делает для действий контроллера. Обратите внимание, что кэш-память использует задачи памяти и rake и имеет тенденцию работать с большими наборами данных, что может вызвать проблемы. Вы можете выборочно отказаться от кэширования для частей вашего кода, используя uncached

2 голосов
/ 09 июля 2009

Вы говорите о кешировании запросов ActiveRecord. Это должно работать и в Rake-Tasks, если вы запускаете их в среде с включенным кэшированием, например production. См. Руководство по кешированию Rails для примеров.

Это может или не может быть правильным видом кэширования для вашего случая:

u1=User.find 1  # loads user1 first time from DB
u2=User.find 2  # loads user2 first time from DB
u1again = User.find 1 # loads user1 from cache
all = User.all # loads user1 and user2 from DB again
1 голос
/ 19 мая 2009

Задача rake будет выполняться в указанной вами среде, и в этом случае она будет принимать правила этой среды.

Вы можете установить env для rails из командной строки:

RAILS_ENV=test

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

...