加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Ruby on Rails制作sitemap.xml 4

发布时间:2020-12-16 22:53:10 所属栏目:百科 来源:网络整理
导读:我正在尝试为我的 Ruby on Rails 4应用程序制作一个站点地图.我会使用像这个 dynamic_sitemaps这样的宝石,但是我不能和Heroku一起使用所以我环顾四周找到了这个教程: http://meghagulati.com/2013/12/05/sitemap-xml-on-heroku-with-ruby-on-rails/自己制作
我正在尝试为我的 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时,我收到此错误,希望有人可以帮我找到错误.

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读