我正在开发的应用程序中遇到异常问题。
我正在编写一个控制器/视图来生成一个 sitemap.xml 资源。我第一次通过在浏览器中查看它来测试它时,它工作得很好。
但是第二次,当我刷新视图时,没有返回页面结果,并且站点地图实际上是空的。
如果我对代码进行更改。只需添加一个空行或删除它,然后第一次正确生成站点地图。任何额外的刷新都是空的。
这是代码:
站点地图控制器
class SitemapController < ApplicationController
layout nil
def index
@pages = Page.where(:publish => true)
@base_url = "http://#{request.host_with_port}"
headers['Content-Type'] = 'application/xml'
def index
respond_to do |format|
format.xml
end
end
end
end
这是sitemap.xml.erb
<?xml version="1.0" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<% @pages.each do |page| %>
<url>
<loc><%= "#{@base_url}/#{page.permalink}" %></loc>
<lastmod><%= page.updated_at %></lastmod>
<priority>0.5</priority>
</url>
<% end unless @pages.nil? %>
</urlset>
和路线
match "/sitemap.xml", :to => "sitemap#index", :defaults => {:format => :xml}
奇怪的是,它似乎在控制器的查询中。
@pages = Page.where(:publish => true)
这会在连续尝试时返回 nil,但应用程序其他部分中的类似查询每次都有效。我尝试过使用 Page.all 和 Page.find :all 等替代方法,但问题仍然存在。
我还将它上传到 Heroku 上的应用程序,想知道它是否在我的环境中,但它也发生在那里。