Wie Schienen werden konfiguriert, um eine Medien-Ressource zuzugreifen, die nicht in seiner herkömmlichen Verzeichnisposition ist?

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

Frage

Lassen Sie uns sagen, dass ich ein Bild, das in der normalen Position befindet sich nicht:

{appname}/public/images/unconventional.gif

Doch statt sich hier:

{appname}/unconventional.gif

Ich verstehe dies eine komplette Verletzung der Rails Konventionen ist, ist unmoralisch und Sie sollten diese unter keinen Umständen tun und darüber hinaus, warum würde ich vorschlagen, auch eine so dumme Sache?

Ok, jetzt, wo wir haben, dass ich unter Windows aus dem Weg, unter der Annahme, und deshalb symbolische Links sind aus der Frage, wie ist es möglich, dies einzurichten?

War es hilfreich?

Lösung

Schienen dient nicht diese Bilder, es lässt den Web-Server tun. Sie hatten am besten die Konfiguration Ihres Web-Server ändern, um dieses Szenario zu behandeln. Wenn Sie Apache verwenden, zum Beispiel, wäre es ziemlich einfach, mit mod_rewrite einzurichten.

Herstellung Rails dienen diese Bilder hässlich sein, aber es ist möglich, wenn Sie eine Route in Ihrem routes.rb bereitzustellen, die /public/images/unconventional.gif übereinstimmt, und wenn die Datei selbst nicht existiert. Zum Beispiel:

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

Und dann einen Controller StaticImageController erstellen:

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

Achtung: , wenn Sie das obige Konzept verwenden, beachten Sie, dass, wenn Sie Eingabe von der URL verwenden, die Datei zu dienen (mit params[:file], zum Beispiel), um zu entscheiden, müssen Sie gründlich sterilisieren Sie die Eingabe, weil Sie Ihr gesamtes Dateisystem zur Außenwelt riskieren ausgesetzt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top