2017-10-04 10 views
2

Utilisation Rails 4.2.10Réécrire User-Agent à tous URI Ouvrir demande

Je voudrais ouvrir l'image d'URL grâce à mongoidpapaerclip et open_uri

Il fonctionne parfaitement dans 95% des cas d'utilisation, mais certains send site web moi un 404 quand ils voient le user-agent de la demande est Ruby.

Le problème est avec la 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 

Si je pouvais ajouter ici une option ce serait génial, mais je ne je pense pas qu'il soit possible de manière à ajouter un en-tête par défaut avec mon user-agent à toute demande faite par open_uri

+1

n'a pas vu la possibilité de définir un en-tête à toutes les demandes, mais la [documentation] (http://ruby-doc.org/stdlib- 2.4.2/libdoc/open-uri/rdoc/OpenURI.html) montre comment définir les en-têtes pour une requête spécifique. Envelopper les requêtes dans une méthode, qui définit toujours l'en-tête, devrait vous donner ce que vous voulez. – ulferts

+0

Oui, mais comment puis-je faire cela parce que c'est une dépendance que je ne peux pas modifier ce code? – BastienSander

Répondre

1

Heureusement pour votre cas d'utilisation, il n'y a pas de fermeture d'une classe contre une modification dans ruby.

Ajoutez un correctif à votre application rails dans un initialiseur. La structure est à peu près comme suit:

Dans 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

Fonctionne parfaitement grâce;) – BastienSander