2014-05-24 6 views
5

Ich versuche eine Sitemap für meine Ruby on Rails 4 Anwendung zu erstellen. Ich würde ein Juwel wie dieses dynamic_sitemaps verwenden, aber ich kann es nicht mit Heroku verwenden, also schaute ich mich um und fand dieses Tutorial: http://meghagulati.com/2013/12/05/sitemap-xml-on-heroku-with-ruby-on-rails/, um mein eigenes (mit kleinen Änderungen) zu machen Aber ich bekomme diesen Fehler, wenn ich myapp gehe. com/sitemap.xml, ich hoffe, jemand kann mir helfen, den Fehler zu finden.Erstellen einer sitemap.xml mit Ruby on Rails 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 

Antwort

8

Zu allererst Sie respond_to muss nur einmal aufgerufen werden, so dass Sie Ihre Controller-Methode ändern müssen, zB:

class SitemapsController < ApplicationController 
    def index 
    @static_pages = [root_url] 

    @movies = Movie.all 
    @series = Series.all 

    respond_to do |format| 
     format.xml 
    end 
    end 
end 

Diese Änderung eine XML machen sollte Datei in Ihrem Browser, wenn Sie folgende URL aufrufen:

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

Darüber hinaus müssen Sie Ihre Routen Spezifikationen ändern, und eine Zeichenfolge für das Format eher als ein Symbol zu verwenden, das heißt Änderung : xml zu „xml“:

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

Sie sollten das gleiche sehen XML-Datei in Ihrem Browser beim Besuch der folgenden URL:

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

(lvh.me löst auf localhost)