Rails кеширует, когда я этого не хочу. Зачем? - PullRequest
1 голос
/ 13 мая 2010

Rails кеширует индексный метод одного из моих контроллеров. Это очень простое приложение, в котором всего 2 контроллера и несколько действий каждый. Странно то, что в моем приложении вообще нет кэширования, по крайней мере, явно. Страницы не кэшируются, если я перезапущу пассажира. Использует ли rails автоматическое кэширование страниц?

  • В каталоге public нет файлов
  • Страница возвращает заголовок 200
  • У меня нет блоков кэширования в моих представлениях (я использую haml, если это имеет значение)
  • У меня не определено действие, контроллер или кэширование страниц
  • Запрос - это удар по рельсам, подтвержденный журналом производства

У меня в производственной программе есть следующее:

config.cache_classes = true<br> config.action_controller.consider_all_requests_local = false config.action_controller.perform_caching = true config.action_view.cache_template_loading = true

Проблема в том, что он не показывает Releases в table, на мой взгляд, но будет, если я перезапущу пассажира. Причина, по которой я знаю, что это ошибка, заключается в том, что я могу запустить консоль Rails и выполнить Release.ready, то есть именованную область видимости, отображаемую в представлении, и я действительно получаю некоторые результаты обратно.


Вот соответствующий код:

Модели / release.rb

class Release < ActiveRecord::Base
  default_scope :order => 'created_at DESC'
  named_scope :ready, :conditions => ['show_on <= ? AND is_deleted = ?', Time.now, false]
end

Контроллеры / releases_controller.rb

class ReleasesController < ApplicationController
  def index
    @releases = Release.ready
  end
end

Вид / выпуски / index.html.haml

%table{:border => 1}
  %tr
    %th Date
    %th Title
    %th Artist
    %th Song
  - @releases.each do |release|
    - @release = release

    %tr[release]
      %td
        = link_to_remote "delete", :url => release, :method => :delete , :confirm => 'Remove?'
        = release.created_at.to_date.to_s(:long_ordinal)
      %td= link_to release.title, release.url
      %td= in_place_editor_field :release, :artist
      %td= in_place_editor_field :release, :song

1 Ответ

1 голос
/ 13 мая 2010

Если в общей папке нет файлов, я не думаю, что ваши представления кэшируются.

Некоторое время назад Rails кэшировал источник представлений (так же, как модели), поэтому, если вы вносите изменения в эти представления в рабочем режиме, вам нужно перезапустить пассажира, чтобы эти изменения вступили в силу, когда вы просматриваете его через браузер. .

Дайте мне знать, если что-то покажется мне неясным из моего ответа.

РЕДАКТИРОВАТЬ: Вот ссылка на журнал изменений с того момента, когда я считаю, что это произошло: Замечания к выпуску Ruby on Rails 2.3

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