¿Cómo se configuran los Rails para acceder a un recurso de medios que no está en su ubicación de directorio convencional?

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

Pregunta

Digamos que tengo una imagen que no reside en la ubicación normal:

{appname}/public/images/unconventional.gif

Pero en cambio aquí:

{appname}/unconventional.gif

Entiendo que esto es una violación completa de las convenciones de Rails, es inmoral y nunca debes hacerlo bajo ninguna circunstancia y, además, ¿por qué te sugiero algo tan tonto?

Ok, ahora que tenemos eso fuera del camino, asumiendo que estoy en Windows y por lo tanto los enlaces simbólicos están fuera de la cuestión, ¿cómo es posible configurar esto?

¿Fue útil?

Solución

Rails no sirve estas imágenes, permite que el servidor web lo haga. Es mejor que cambie la configuración de su servidor web para manejar este escenario. Si usa Apache , por ejemplo, sería bastante fácil de configurar con mod_rewrite .

Hacer que Rails sirva estas imágenes será feo, pero es posible si proporciona una ruta en su routes.rb que coincida con / public / images / unconventional.gif , y si el archivo en sí no existe. Por ejemplo:

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

Y luego cree un controlador 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

Advertencia: si usa el concepto anterior, tenga en cuenta que si usa la entrada de la URL para decidir qué archivo servir (con params [: file] , para ejemplo), necesita minuciosamente desinfectar la entrada, porque se arriesga a exponer todo su sistema de archivos al mundo exterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top