2013-04-22 2 views
0

우리는 Rails 'caches_action 방법을 Redis와 함께 사용하여 공통 페이지의 캐싱을 구현합니다. 매우 동적 인 사이트이므로 다른 URL 매개 변수가있는 페이지는 캐시에서 고유해야합니다 (예 : ?page=1?page=2). 그러나 URL이 일치하는 한 콘텐츠를 캐시하여 여러 방문자에게 제공 할 수 있습니다.레일스 생성 링크에서 특정 매개 변수를 기본적으로 제외시킬 수 있습니까?

Google 트래픽의 상당 부분이 애드워즈 광고에서 나왔기 때문에 많은 사용자가 URL에 gclid 매개 변수로 페이지에 도착하여 캐싱이 쓸모 없게되었습니다. 나는 우리가 캐싱 된 HTML 내부 링크를 포함하기 때문에 우리의 웹 로그 분석 데이터가 꺼져 것을 알게 될 때까지,

caches_action :search, 
       :expires_in => 10.minutes, 
       :cache_path => Proc.new { |c| c.params.except('gclid') } 

이 잠시 동안 큰 일 : 나는 고유 URL을 식별하는 데 사용되는 캐시 경로에서 GCLID를 제외하여이 문제를 해결했다 이전 방문에서 발생한 gclid 매개 변수를 사용합니다. 자동으로 생성 된 모든에서 gclid를 제외 할 수있는 방법이있다 :

link_to 'some page', params.except('gclid') 

내 질문은 :

그래서 이에 대한 해결책은 꽤 straightforward- 내가 같이 수동으로 gclid을 제외해야 링크를 생성 할 때마다입니다 모래밭? 이 작업은 사이트 전체에서 수동으로 수행하지 않아도되므로 편리합니다.

+0

아마도이 라인을 추가하여 원숭이 패치'link_to' 메소드를 만들 수 있습니다. – MurifoX

+0

예, link_to를 패치하는 것에 대해 생각했습니다. 그러나 url_for와 잠재적으로 몇 가지 유사한 방법을 패치해야합니다. –

답변

0

다음은 내가 생각해 낸 것입니다. 그에 후크하는 가장 좋은 장소를 보인다 있도록 link_to는, 어쨌든 url_for를 호출 끝나는 것으로 밝혀졌습니다.

module ActionDispatch 
    module Routing 
    module UrlFor 
     alias :original_url_for :url_for 
     def url_for(options = {}) 
     options = options.except(:gclid) if options.kind_of? Hash 
     original_url_for options 
     end 
    end 
    end 
end 

This answer을 MurifoX의 코멘트 @처럼 나를, 거기 @jdc 도우미에 의해.

관련 문제