Rails не обслуживает эти изображения, это позволяет веб-серверу делать это. Вы лучше всего изменили конфигурацию своего веб-сервера, чтобы справиться с этим сценарием. Например, если вы используете Apache
, его довольно легко настроить с помощью mod_rewrite
.
Заставить Rails обслуживать эти изображения будет некрасиво, но возможно возможно, если в вашем routes.rb
указан маршрут, соответствующий /public/images/unconventional.gif
, и если сам файл не существует. Например:
map.connect "public/images/unconventional.gif",
:controller => "static_image_controller",
:action => "serve"
А затем создать контроллер 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
Предупреждение: если вы используете вышеуказанную концепцию, учтите, что если вы используете ввод с URL-адреса, чтобы решить, какой файл обслуживать (например, с params[:file]
), вам необходимо тщательно очистить входные данные, потому что вы рискуете подвергнуть всю файловую систему внешнему миру.