Comment configurer Rails pour accéder à une ressource multimédia qui ne se trouve pas dans son emplacement de répertoire conventionnel?

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

Question

Disons que j'ai une image qui ne réside pas à l'emplacement normal:

{appname}/public/images/unconventional.gif

Mais à la place ici:

{appname}/unconventional.gif

Je comprends qu'il s'agit d'une violation complète des conventions Rails, qu'elle est immorale et que vous ne devriez jamais le faire, quelles que soient les circonstances. En outre, pourquoi devrais-je même suggérer une chose aussi stupide?

Ok, maintenant que tout est en ordre, à supposer que je sois sous Windows et que les liens symboliques soient hors de question, comment est-il possible de le configurer?

Était-ce utile?

La solution

Rails ne sert pas ces images, il permet au serveur Web de le faire. Vous feriez mieux de modifier la configuration de votre serveur Web pour gérer ce scénario. Si vous utilisez Apache , par exemple, il serait assez facile de configurer avec mod_rewrite .

Faire en sorte que Rails serve ces images sera laide, mais c'est possible si vous fournissez une route dans votre routes.rb qui correspond à / public / images / unconventional.gif , et si le fichier lui-même n'existe pas. Par exemple:

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

Et créez ensuite un contrôleur 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

Avertissement: si vous utilisez le concept ci-dessus, notez que si vous utilisez une entrée à partir de l'URL pour choisir le fichier à servir (avec params [: fichier] , exemple), vous devez soigneusement purifier l’entrée, car vous risqueriez d’exposer tout votre système de fichiers au monde extérieur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top