`Describe table` отображается при каждом запросе Rails - PullRequest
1 голос
/ 30 декабря 2010

У меня есть 2 модели, band и genre, и отношение «многие ко многим» через таблицу ассоциации bands_genres (у которой нет модели) следующим образом.

class Genre < ActiveRecord::Base
   has_and_belongs_to_many :bands

class Band < ActiveRecord::Base
   has_and_belongs_to_many :genres

Проверяя выходные журналы моего приложения, я вижу, что каждый вызов с участием групп или жанров в итоге выполняет этот запрос:

SQL (1.8ms)  describe `bands_genres`

Почему это происходит?Как я могу как-то кешировать результат этого запроса, чтобы избежать его выполнения при каждом запросе?

Ответы [ 2 ]

4 голосов
/ 30 декабря 2010

Запустите ваш сервер в производственном режиме. Информация таблицы перезагружается при каждом запросе в режиме разработки.

rails s -e production
0 голосов
/ 27 февраля 2013

Это потому, что ваша текущая конфигурация среды говорит Rails сделать это. Я предполагаю, что вы используете «развитие», но у вас есть «производство», а также «тестирование».

Существует возможность кэшировать классы в любой конфигурации вашего envs. Проверьте текущий (я полагаю, вы используете "развитие"):

    config/environments/development.rb

и измените эту опцию на true:

    # In the development environment your application's code is reloaded on
    # every request.  This slows down response time but is perfect for development
    # since you don't have to restart the webserver when you make code changes.
    config.cache_classes = true

Затем запустите сервер в текущей среде. Для разработки:

bundle exec rails s

достаточно.

Это делает 2 вещи:

    1) when Rails start, it will now read all classes' definitions
    (models) up front, and keep it for each request. 
    When you change a class now, no code will be reloaded automatically

    2) Rails will not ask database for model metadata change, 
    so no "describe table" will go to database in any request

Для env "Production" по умолчанию для этой опции установлено значение "true". Но «производственная» среда предназначена для производства, а не развития. Вы можете указать различные параметры, URL, VAR там ..

...