Come si configurano Rails per accedere a una risorsa multimediale che non si trova nella sua posizione di directory convenzionale?

StackOverflow https://stackoverflow.com/questions/1029442

Domanda

Diciamo che ho un'immagine che non risiede nella posizione normale:

{appname}/public/images/unconventional.gif

Ma invece qui:

{appname}/unconventional.gif

Comprendo che si tratta di una violazione totale delle convenzioni di Rails, è immorale e non dovresti mai farlo in nessuna circostanza e, inoltre, perché dovrei anche suggerire una cosa così sciocca?

Ok, ora che lo abbiamo rimosso, supponendo che io sia su Windows e quindi i collegamenti simbolici sono fuori questione, come è possibile configurarlo?

È stato utile?

Soluzione

Rails non fornisce queste immagini, ma consente al web server di farlo. È meglio modificare la configurazione del server Web per gestire questo scenario. Se usi Apache , ad esempio, sarebbe abbastanza facile configurarlo con mod_rewrite .

Fare in modo che Rails serva queste immagini sarà brutto, ma è possibile se fornisci un percorso nel tuo route.rb che corrisponde a / public / images / unconventional.gif e se il file stesso non esiste. Ad esempio:

map.connect "public/images/unconventional.gif",
  :controller => "static_image_controller",
  :action => "serve"

E quindi creare un controller StaticImageController :

class StaticImageController < ApplicationController
  def serve
    image = File.read(File.join(Rails.root, "unconventional.gif"))
    send_data image, :type => "image/gif", :disposition => "inline"
  end
end

Avviso: se si utilizza il concetto sopra riportato, tenere presente che se si utilizza l'input dall'URL per decidere quale file pubblicare (con params [: file] , per esempio), è necessario eliminare completamente l'input, poiché si rischia di esporre l'intero file system al mondo esterno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top