Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Can';t修改Rails 4中冻结的哈希和缓存设置_Ruby On Rails 4_Caching_Hash_Wicked Pdf - Fatal编程技术网

Ruby on rails 4 Can';t修改Rails 4中冻结的哈希和缓存设置

Ruby on rails 4 Can';t修改Rails 4中冻结的哈希和缓存设置,ruby-on-rails-4,caching,hash,wicked-pdf,Ruby On Rails 4,Caching,Hash,Wicked Pdf,我正在维护一个Rails 4.1应用程序,并尝试使用wicked_PDF gem生成一个PDF。我有一个路线,控制器,动作设置很好。它将以html的形式显示路径,但当.pdf作为一种格式传递时,我会得到错误“无法修改冻结哈希”,它指向我们在下面设置的用于处理缓存设置的库 lib/cache\u settings.rb class CacheSettings def initialize app, pat @app = app @pat = pat end def c

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

lib/cache\u 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
  get '/people/:id/poster/:id' => 'people#poster', as: :poster
<%= link_to "Poster", poster_path(@name.id, format: 'pdf'), class: 'btn btn-small' %>
def poster
    @name = Person.includes(:notes :vehicles).find(params[:id])

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

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
  get '/people/:id/poster/:id' => 'people#poster', as: :poster
<%= link_to "Poster", poster_path(@name.id, format: 'pdf'), class: 'btn btn-small' %>
def poster
    @name = Person.includes(:notes :vehicles).find(params[:id])

end
show.html.erb

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
  get '/people/:id/poster/:id' => 'people#poster', as: :poster
<%= link_to "Poster", poster_path(@name.id, format: 'pdf'), class: 'btn btn-small' %>
def poster
    @name = Person.includes(:notes :vehicles).find(params[:id])

end
所以我认为这和缓存设置有关,但我对缓存的设置不是很熟悉。我已尝试从rackup文件中删除缓存设置,但在尝试渲染pdf时仍会出现无法修改冻结哈希错误


我很确定当对象从控制器内传递时会冻结,但不确定如何解冻或复制它以传递到海报动作。

你有没有发现这个问题?是的,我需要发布我的答案,但不幸的是,这不是很直接。