Как настроить Rails для доступа к медиа-ресурсу, который находится не в его обычном каталоге? - PullRequest
2 голосов
/ 23 июня 2009

Допустим, у меня есть изображение, которое не находится в обычном месте:

{appname}/public/images/unconventional.gif

Но вместо этого здесь:

{appname}/unconventional.gif

Я понимаю, что это полное нарушение конвенций Rails, аморально, и вы никогда не должны делать это ни при каких обстоятельствах, и, кроме того, почему я бы даже предложил такую ​​глупость?

Хорошо, теперь, когда у нас все в порядке, при условии, что я нахожусь в Windows, и, следовательно, о символических ссылках не может быть и речи, как это можно настроить?

1 Ответ

6 голосов
/ 23 июня 2009

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]), вам необходимо тщательно очистить входные данные, потому что вы рискуете подвергнуть всю файловую систему внешнему миру.

...