2017-10-04 1 views
2

Mit Rails 4.2.10Rewrite User-Agent für alle offen URI anfordern

würde Ich mag das Bild öffnen von URL dank mongoidpapaerclip und open_uri

Es funktioniert perfekt in 95% der Anwendungsfälle aber einige Website senden mir ein 404, wenn sie die user-agent der Anfrage sehen, ist Ruby.

Das Problem ist, mit dem 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 

Wenn ich hier eine Option hinzufügen könnte, es wäre toll, aber ich glaube nicht, dass es möglich ist, so würde Ich mag einen Standard-Header hinzufügen mit meiner user-agent zu allen Anfrage von open_uri

+1

Haben Sie nicht die Möglichkeit, sehen einen Header auf alle Anfragen zu setzen, sondern die [Dokumentation] (http://ruby-doc.org/stdlib- 2.4.2/libdoc/open-uri/rdoc/OpenURI.html) zeigt, wie Header für eine bestimmte Anfrage gesetzt werden. Die Anforderungen in einer Methode zu verpacken, die immer den Header festlegt, sollte Ihnen geben, was Sie wollen. – ulferts

+0

Ja, aber wie kann ich das schaffen, da es eine Abhängigkeit ist, die ich nicht ändern kann? – BastienSander

Antwort

1

Glücklicherweise für Ihren Anwendungsfall gibt es keine solche Sache, die gegen Änderungen in Ruby geschlossen wird.

Fügen Sie Ihrer Rails-App in einem Initialisierer einen Patch hinzu. Die Struktur ist in etwa wie folgt:

In 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

Funktioniert perfekt, danke;) – BastienSander