Как получить Rails для маршрутизации на контроллер вместо статического файла в общей папке? - PullRequest
1 голос
/ 09 сентября 2011

В приложении Rails 2.3 у меня есть SitemapController с действием sitemap, которое создает удобочитаемую страницу карты сайта, и маршрут к ней в файле маршрутов.В общей папке есть файл sitemap.xml для поисковых систем.Проблема в том, что http://mysite/sitemap обслуживает sitemap.xml, а не маршрутизирует к контроллеру.Если я удаляю sitemap.xml, то он просто перенаправляется на контроллер.

На некоторых других очень похожих сайтах у нас точно такая же схема, но на тех, которые существует sitemap.xml, не не предотвратить Rails от маршрутизации на контроллер.На этих сайтах, как и ожидалось, http://mysite/sitemap направляет на SitemapController#sitemap, а http://mysite/sitemap.xml обслуживает статический файл.Тем не менее, я не смог обнаружить каких-либо различий, которые могли бы вызвать эту проблему.

Кто-нибудь может подсказать, что может быть причиной, или как я мог бы отладить это?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

вы можете сделать что-то вроде:

class SiteMapController
  def sitemap
    respond_to do |format|
      format.xml { render :file => "/any/path/you/want/to/your/sitemap.xml" }
      # you can then add other formats, like html, for a more human-readable response
    end
  end

и удалите xml в / public.

подробнее: http://apidock.com/rails/ActionController/MimeResponds/respond_to

2 голосов
/ 09 сентября 2011

Это, вероятно, функция того, как вы размещаете свое приложение. Различные среды веб-сервера имеют значения по умолчанию, которые могут повлиять на это. Например, Apache будет стремиться обслуживать статический файл с более высоким приоритетом, чем вызов вашего приложения, но его можно настроить так, чтобы он вообще не обслуживал статические файлы, если вы используете что-то вроде Passenger.

Способ изменения этого параметра в значительной степени зависит от используемого программного обеспечения веб-сервера.

...