Como Rails ser configurado para acessar um recurso de mídia que não está na sua localização diretório convencional?

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

Pergunta

Vamos dizer que eu tenho uma imagem que não reside no local normal:

{appname}/public/images/unconventional.gif

Mas, em vez aqui:

{appname}/unconventional.gif

Eu entendo isso é uma violação completa das convenções Rails, é imoral e você nunca deve fazer isso em qualquer circunstância e, além disso, por que eu iria mesmo sugerir uma coisa tão tola?

Ok, agora que temos que fora do caminho, supondo que eu estou no Windows e ligações, portanto, simbólicos estão fora de questão, como é possível configurá-lo?

Foi útil?

Solução

Rails não servem essas imagens, ele permite que o servidor web fazer isso. Você teve melhor alterar a configuração do seu servidor web para lidar com esse cenário. Se você usar Apache, por exemplo, seria bastante fácil de configurar com mod_rewrite.

Fazendo Rails servem essas imagens vão ser feio, mas é é possível se você fornecer uma rota na sua routes.rb que partidas /public/images/unconventional.gif, e se o arquivo não existe. Por exemplo:

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

E, em seguida, criar um StaticImageController controlador:

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

Aviso: se você usar o conceito acima, nota que se você usar a entrada do URL para decidir qual arquivo para servir (com params[:file], por exemplo), você precisa completamente higienizar a entrada, porque você está arriscando expor o seu sistema de arquivos inteiro para o mundo exterior.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top