我正在尝试为我的
Ruby on Rails 4应用程序制作一个站点地图.我会使用像这个
dynamic_sitemaps这样的宝石,但是我不能和Heroku一起使用所以我环顾四周找到了这个教程:
http://meghagulati.com/2013/12/05/sitemap-xml-on-heroku-with-ruby-on-rails/自己制作(有了很小的改动)
但是当我访问myapp.com/sitemap.xml时,我收到此错误,希望有人可以帮我找到错误.
但是当我访问myapp.com/sitemap.xml时,我收到此错误,希望有人可以帮我找到错误.
SitemapsController #index中的ActionController :: UnknownFormat
ActionController :: UnknownFormat提取的源(第7行):respond_to do | format |
#app/controllers/sitemaps_controller.rb class SitemapsController < ApplicationController def index @static_pages = [root_url] @movies = Movie.all respond_to do |format| format.xml end @series = Series.all respond_to do |format| format.xml end end end #app/views/sitemaps/index.xml.builder base_url = "http://#{request.host_with_port}" xml.instruct! :xml,:version=>'1.0' xml.tag! 'urlset','xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9' do xml.url{ xml.loc("http://myapp.com") xml.changefreq("weekly") xml.priority(1.0) } xml.url{ xml.loc("http://myapp.com/movies") xml.changefreq("daily") xml.priority(0.9) } xml.url{ xml.loc("http://myapp.com/series") xml.changefreq("daily") xml.priority(0.9) } @movies.each do |movie| xml.url { xml.loc "#{movie_url(movie)}" xml.lastmod movie.updated_at.strftime("%F") xml.changefreq("weekly") xml.priority(0.5) } end @series.each do |series| xml.url { xml.loc "#{series_url(series)}" xml.lastmod series.updated_at.strftime("%F") xml.changefreq("weekly") xml.priority(0.5) } end end #config/routes.rb resources :sitemaps,:only => :index get "sitemap.xml" => "sitemaps#index",format: :xml,as: :sitemap
解决方法
首先,你只需要调用一次respond_to,所以你需要改变你的控制器方法,例如:
class SitemapsController < ApplicationController def index @static_pages = [root_url] @movies = Movie.all @series = Series.all respond_to do |format| format.xml end end end
当您访问以下URL时,此更改应在浏览器中呈现XML文件:
http://lvh.me:3000/sitemaps.xml
此外,您需要更改路由规范并使用字符串作为格式而不是符号,即将:xml更改为“xml”:
get "sitemap.xml" => "sitemaps#index",:format => "xml",:as => :sitemap
访问以下URL时,您应该在浏览器中看到相同的XML文件:
http://lvh.me:3000/sitemap.xml
(lvh.me解析为localhost)