2014-05-24 86 views
5

我想爲我的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,我希望有人可以幫助我找到錯誤。使用Ruby on Rails製作sitemap.xml 4

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 

回答

8

首先,你的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 

這種變化應該呈現一個XML當您訪問以下URL時在您的瀏覽器中的文件:

http://lvh.me:3000/sitemaps.xml

此外,你需要改變你的路由規範,並使用字符串格式而不是一個符號,即變:XML「XML」

get "sitemap.xml" => "sitemaps#index", :format => "xml", :as => :sitemap 

你應該看到相同的在瀏覽器的XML文件瀏覽下列URL時:

http://lvh.me:3000/sitemap.xml

(lvh.me解析爲localhost)