使用Rails 4.2.10
由于mongoid
papaerclip
和open_uri
它完全适用于95%的用例,但有些网站在看到请求的user-agent
为Ruby
时向我发送了404。
问题在于lib paperclip
=>
paperclip/io_adapters/uri_adapter.rb in download_content at line 48
def download_content
options = { read_timeout: Paperclip.options[:read_timeout] }.compact
open(@target, **options)
end
如果我可以在这里添加一个选项,那就太棒了,但我认为不可能,所以我想将user-agent
的默认标题添加到open_uri
所做的所有请求中{1}}
答案 0 :(得分:1)
幸运的是,对于你的用例,没有一个类被关闭以防止ruby中的修改。
在初始化程序中为您的rails应用添加补丁。结构大致如下:
在config/initializers/some_arbitrary_name.rb
module UriAdapterPatch
def open(url, options)
# alter the objects however you want
super(altered_or_original_url, altered_or_original_options)
end
end
Paperclip::UriAdapter.prepend(UriAdapterPatch)
答案 1 :(得分:1)
paperclip-3.5.4
的解决方案
module Paperclip
class UriAdapter < AbstractAdapter
def download_content
open(@target,"User-Agent" => "Your Custom User Agent")
end
end
# for example put it in config/initializers/paperclip_user_agent.rb
对于其他版本,只需写入项目文件夹
gem which paperclip
并在输出文件paperclip/io_adapters/uri_adapter.rb
的路径中查找
有函数def download_content
,你的目的是重写