the*_*ist 8 ruby sitemap ruby-on-rails heroku ruby-on-rails-4
我正在尝试为我的Ruby on Rails 4应用程序制作一个站点地图.我会使用像这样的dynamic_sitemaps的gem,但是我不能和Heroku一起使用所以我环顾四周找到了这个教程:http://meghagulati.com/2013/12/05/sitemap-xml-on-heroku-with- ruby-on-rails /制作我自己的(稍加更改)但是当我访问myapp.com/sitemap.xml时我收到此错误,希望有人可以帮我找到错误.
ActionController::UnknownFormat in SitemapsController#index
ActionController::UnknownFormat Extracted source (around line #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
Run Code Online (Sandbox Code Playgroud)
首先,您只能调用一次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
Run Code Online (Sandbox Code Playgroud)
当您访问以下URL时,此更改应在浏览器中呈现XML文件:
http://lvh.me:3000/sitemaps.xml
此外,您需要更改路由规范并使用字符串作为格式而不是符号,即将:xml更改为"xml":
get "sitemap.xml" => "sitemaps#index", :format => "xml", :as => :sitemap
Run Code Online (Sandbox Code Playgroud)
访问以下URL时,您应该在浏览器中看到相同的XML文件:
http://lvh.me:3000/sitemap.xml
(lvh.me解析为localhost)