2017-10-04 81 views
2

使用Rails 4.2.10重写用户代理所有打开的URI请求

我想从URL感谢打开图像mongoidpapaerclipopen_uri

它完美地工作在用例的95%,但一些网站发送我404的时候看到user-agent的请求是Ruby

的问题是与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

没看到选项报头设置为所有请求,但[文档】(http://ruby-doc.org/stdlib- 2.4.2/libdoc/open-uri/rdoc/OpenURI.html)显示了如何为特定请求设置标题。在一个方法中包装请求,该方法总是设置标题应该给你你想要的。 – ulferts

+0

是的,但我怎么能做到这一点,因为它是一个依赖我不能修改此代码? – BastienSander

回答

1

幸运的是,你的用例没有这样的事情,作为一个类正在关闭修改红宝石。

在初始化程序中为您的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) 
+0

完美的工作谢谢;) – BastienSander