2013-03-19 3 views
3

... что имеет смысл. Я использую метод catch для маршрутизации страниц в пользовательской CMS. Однако я все равно хотел бы получить доступ к загруженным пользователем ресурсам в моей общей папке. Мой маршрут выглядит следующим образом:Rails catch all route предотвращает доступ к общей папке

match "(*url)" => 'pages#show' 

И мой контроллер делает это:

def show 
    @page = Page.where(:url => ['/', params[:url]].join).first 
    begin 
     render :template => "templates/" + @page.template.slug 
    rescue 
     render "public/404.html" 
    end 
end 

Теперь я знаю, что я мог бы, вероятно, разобрать URL в моем контроллере, но мне было интересно, если есть лучше рельсы путь - например, могу ли я добавить исключение для всего маршрута catch?

Мысли?

+0

Статические файлы должны иметь приоритет над рельсами. – tadman

+0

Но они не кажутся .. Я все еще нажимаю на контроллер при попытке получить доступ к /public/images/dinner.jpeg, например, – Pierre

+0

@tadman. О, я плохо, я не должен был публиковать в URL-адресе. Доступ к /images/dinner.jpeg работает нормально. Если вы напишете ответ в ответ, я соглашусь с ним. – Pierre

ответ

3

Обычно статические файлы будут иметь приоритет над Rails-контентом, если ваш сервер настроен правильно.

Будьте осторожны, чтобы не путать путь относительно приложения, например /public/images/test.png, с дорожкой относительно корня паутины, которая была бы /images/test.png. Это противоречивое определение «пути» путало многих разработчиков.

0

На Rails 5 стандартная производственная конфигурация позволяет публичному файловому серверу с помощью флага переменной среды. Либо установите значение enabled непосредственно на true, либо убедитесь, что задана переменная окружения RAILS_SERVE_STATIC_FILES. Затем файлы в общедоступном каталоге будут обслуживаться, а захват всего маршрута не будет их поймать.

# config/environments/production.rb 
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? 
Смежные вопросы