本番環境でのみ発生するクレイジーな問題があります。開発ではまったく複製できません。
さまざまな理由から、次の設定をしています。
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の問題のように見えますが、ここで何をすべきかわかりません.
ありがとう!