是否有人成功实施了带子域的rails页面缓存?
现在,子域之间正在提供相同的文件,因为rails无法识别子域已更改的事实。
我希望我的网页缓存看起来像这样:
/public/cache/subdomain1/index.html
/public/cache/subdomain1/page2.html
/public/cache/subdomain2/index.html
/public/cache/subdomain2/page2.html
我使用nginx来提供这些页面,因此需要更改它的配置文件,以便在缓存后找到这些文件,这不会成为问题。我现在的关键点在于轨道末端。
答案 0 :(得分:1)
您需要根据正在使用的子域更新缓存位置。
您可以添加before_filter
来执行此操作。
一个例子是:
class ApplicationController < ActionController::Base
before_filter :update_cache_location
def update_cache_location
if current_subdomain.present?
ActionController::Base.page_cache_directory = "#{Rails.public_path}/cache/#{current_subdomain.directory_name}"
end
end
end
答案 1 :(得分:1)
我使用了这个人的post(经过一些修改)
class ApplicationController < ActionController::Base
# Cache pages with the subdomain
def cache_page(content = nil, options = nil, gzip = Zlib::BEST_COMPRESSION)
path = [nil, request.subdomains, nil].join("/") # nil would add slash to 2 ends
path << case options
when Hash
url_for(options.merge(:only_path => true, :skip_relative_url_root => true, :format => params[:format]))
when String
options
else
if request.path.empty? || request.path == '/'
'/index'
else
request.path
end
end
super(content, path, gzip)
end
然后只使用通常的caches_page类方法。
这样做的结果是,我也需要破解expire_page(帖子中没有提到)。如果存在,Rails也不会使用现有的页面缓存,因为它不会在默认路径中找到它。