我正在维护一个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时仍然无法修改冻结哈希错误。
我很确定这是从控制器内部传递时对象冻结的问题,但不知道如何解冻它或将其复制以传递给海报动作。