Rails [已解决] 生产环境下 cache fragment 如何响应多格式请求?

saiga · 2012年12月14日 · 最后由 saiga 回复于 2012年12月14日 · 3146 次阅读

譬如 views 下有 _part.html.erbshow.js.coffeeshow.html.erb

show.js.coffee

console.log "<%= render :partial => 'part' %>"

show.html.erb

<%= render :partial => 'part' %>

_part.html.erb

<% cache do %>
...
<% end %>

在开发环境(已开缓存)下能够正确返回,但生产环境下 js 渲染的还是 show.html.erb,而且只返回 part的内容。

一开始以为是 cache key 的原因,后来加上 cache @format do 还是一样的结果。求助!

花了点时间才发出帖子,原因: 提交草稿current_user_token 就失效并退出登录了,只能进某个帖子在节点中发布。

<% cache do %>
...
<% end %>

... 里面是什么东西?要求 js 和 html 生成的东西不同么?

#2 楼 @huacnlee 一样的所以才省略。

再把场景描述具体一些,看不明白

#4 楼 @huacnlee 附图应该更直观点:

<% cache do %>
#这里的内容是完全一样的,是 show.js.coffee 和 show.html.erb 里的一部份
<% end %>

publics_controller.rb 里面的内容发出来看看,从你上面的显示来看,render 直接是 show.html.erb 了

@huacnlee

class PublicsController < ApplicationController
  layout 'public'
  respond_to :js, :html

  def show
    @document = Document.public(params[:shared_id]).first
    respond_with @document
  end
end

我不确定 show.js.coffee 是否真能有效(没试过) 你试试 show.js.coffee 改为 show.js.erb 看看,应该是 Rails 发现没有 .js.erb 的文件,而自动用 .html.erb 的文件来生成了

#8 楼 @huacnlee

开发环境能够正确返回,我去试试改成 js.erb 能不能生效

#9 楼 @saiga 还有 Gemfile 贴出来看看(别截图,代码的东西发文本!)

#8 楼 @huacnlee 改成 show.js.erb 就可以了。 show.js.coffee开发环境可以,生产环境不行。

#11 楼 @saiga Gemfile 里面应该有

group :development do
  # 和 js.coffee 有关的 Gem 你是不是写在这里了?如果是,改到外面去
end

#12 楼 @huacnlee 发现了:gem 'coffee-rails' 默认写到 group :assets 里面了,改到外面就可以了,非常感谢!XD

需要 登录 后方可回复, 如果你还没有账号请 注册新账号