无法在Rails 4中修改冻结的哈希和缓存设置

时间:2016-02-02 20:51:15

标签: ruby-on-rails-4 caching hash wicked-pdf

我正在维护一个Rails 4.1应用程序,我正在尝试使用wicked_pdf gem生成PDF。我有一个路由,控制器和操作设置很好。它将路径显示为html但是当.pdf作为格式传递时,我得到错误“无法修改冻结的哈希”,它指向我们在下面设置的lib来处理缓存设置。

LIB / cache_settings.rb

class CacheSettings
  def initialize app, pat
    @app = app
    @pat = pat
  end

  def call env
    res = @app.call(env)
    path = env["REQUEST_PATH"]
    @pat.each do |pattern,data|
      if path =~ pattern
        res[1]["Cache-Control"] = data[:cache_control] if data.has_key?(:cache_control)
        res[1]["Expires"] = (Time.now + data[:expires]).utc.rfc2822 if data.has_key?(:expires)
        return res
      end
    end
    res
  end
end

config.ru

require ::File.expand_path('../config/environment',  __FILE__)
require 'cache_settings'

use Rack::Deflater
use CacheSettings, {
    /\/assets\// => {
        :cache_control => 'max-age=31536000,public',
        :expires => 31536000
    },
    /\/images\// => {
        :cache_control => 'max-age=31536000,public',
        :expires => 31536000
    }
}
run MyApp::Application

的routes.rb

  get '/people/:id/poster/:id' => 'people#poster', as: :poster

show.html.erb

<%= link_to "Poster", poster_path(@name.id, format: 'pdf'), class: 'btn btn-small' %>

people_controller.rb

def poster
    @name = Person.includes(:notes :vehicles).find(params[:id])

end

所以我认为这与缓存设置有关,但我不太熟悉这个缓存是如何设置的。我试图从rackup文件中删除缓存设置,但在尝试渲染pdf时仍然无法修改冻结哈希错误。

我很确定这是从控制器内部传递时对象冻结的问题,但不知道如何解冻它或将其复制以传递给海报动作。

0 个答案:

没有答案