我有一个只在生产中发生的疯狂问题。我根本无法在开发中复制它。
由于各种原因,我有以下设置:
class OrdersController < PublicController
class PublicController < CommonController
class CommonController < ApplicationController
在 CommonController 内部,我有一个这样的方法:
def mobile_ready
# set request format
if mobile_view?
request.format = :mobil
self.class.layout 'apps/dmvcs'
else
request.format = :html
end
end
现在事情变得奇怪了:
在 OrdersController 我有这个:
before_filter :mobile_ready
在 PublicController 我有这个:
layout :select_layout
protected
def select_layout
mobile_view? ? 'public_mobile' : 'public'
end
我已经跟踪了调用的顺序,并且在 select_layout 之前调用了 mobile_ready 方法,我认为应该如此。
但令人难以置信的是,在上述考试中,订单页面没有以公共布局呈现!!??它使用“app/dmvcs”布局(WTF!?)呈现。我已经检查并三重检查和 mobile_view?在桌面上是 FALSE,但它仍然使用错误的布局。
更奇怪的是,如果我有这个:
class PublicController < CommonController
layout 'public' # set this so there is a default layout
layout :select_layout
它有 70% 的时间工作,这意味着它可能会呈现正确的布局,也可能不会!?
有没有人见过这样的事情?显然,这似乎是某种奇怪的缓存或 nginx 问题,但我不知道该怎么做。
谢谢!