当我不想要它时,Rails就会缓存。为什么?

时间:2010-05-13 04:40:49

标签: ruby-on-rails caching

Rails正在缓存我的一个控制器的索引方法。这是一个非常简单的应用程序,每个只有2个控制器和少数几个操作。奇怪的是我在我的应用程序中根本没有任何缓存,至少没有明确说明。如果我重新启动乘客,页面将被缓存。 rails是否会进行某种自动页面缓存?

  • public目录
  • 中没有文件
  • 页面返回200标题
  • 我的观点中没有缓存块(如果重要的话,我使用haml)
  • 我没有定义任何操作,控制器或页面缓存
  • 请求 点击rails,由生产日志验证

我的production.rb中有以下内容:

config.cache_classes = true
config.action_controller.consider_all_requests_local = false config.action_controller.perform_caching = true config.action_view.cache_template_loading = true

问题是我的视图中Releases没有显示任何table,但如果我重新启动乘客,则会显示Release.ready。我知道这是失败的原因是因为我可以启动Rails控制台并执行class Release < ActiveRecord::Base default_scope :order => 'created_at DESC' named_scope :ready, :conditions => ['show_on <= ? AND is_deleted = ?', Time.now, false] end ,这是在视图中显示的命名范围,我实际上得到了一些结果。


以下是相关代码:

模型/ release.rb

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

控制器/ releases_controller.rb

%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

视图/释放/ index.html.haml

{{1}}

1 个答案:

答案 0 :(得分:1)

如果公用文件夹中没有文件,我认为您的视图不会被缓存。

现在有一段时间了,Rails已经缓存了视图源(就像模型一样)所以如果你对那些视图进行了更改,那么在生产中你必须重新启动乘客才能使这些更改在你通过浏览器查看时生效

如果我的回答中有任何问题仍然不清楚,请告诉我。

编辑:以下是我认为发生更改日志的链接:Ruby on Rails 2.3 Release Notes