Я пишу приложение на Rails и в данный момент создаю генератор Sitemap.Все было хорошо, и все еще хорошо на моем компьютере.Но когда я внедряю его в Heroku, у меня возникает проблема.
Генератор работает довольно просто: он просто записывает все URL одного ресурса, а код выглядит так:
Контроллер:
class SitemapController < ApplicationController
layout nil
def index
@solutions = Solution.find(:all, :order => "updated_at DESC")
@base_url = "http://#{request.host_with_port}"
headers['Content-Type'] = 'application/xml'
def index
respond_to do |format|
format.html
format.xml
end
end
end
end
Представление:
<% if @solutions %>
<url>
<loc><%= "#{@base_url}#{solutions_path}" %></loc>
<lastmod><%= @solutions.first.updated_at.to_s(:sitemap) %></lastmod>
<priority>0.6</priority>
</url>
<% @solutions.each do |solution| %>
<url>
<loc><%= "#{@base_url}#{url_for(solution)}" %></loc>
<lastmod><%= solution.updated_at.to_s(:sitemap) %></lastmod>
<priority>0.5</priority>
</url>
<% end %>
Как я уже сказал, локально все отлично работает, но на Heroku ожидаемый результат отображается только один раз после развертывания, в остальное время ссылки не отображаютсяпоскольку решения не выбраны.
Вот журналы:
2012-01-05T16:32:34+00:00 app[web.1]: Started GET "/sitemap.xml" for 194.44.214.138 at 2012-01-05 16:32:34 +0000
2012-01-05T16:32:34+00:00 app[web.1]:
2012-01-05T16:32:34+00:00 app[web.1]: Processing by SitemapController#index as XML
2012-01-05T16:32:34+00:00 app[web.1]: Solution Load (5.1ms) SELECT "solutions".* FROM "solutions" ORDER BY updated_at DESC
2012-01-05T16:32:34+00:00 app[web.1]: (1.4ms) SHOW search_path
2012-01-05T16:32:34+00:00 app[web.1]: Rendered sitemap/index.xml.erb (19.4ms)
2012-01-05T16:32:34+00:00 app[web.1]: Completed 200 OK in 92ms (Views: 70.4ms | ActiveRecord: 21.3ms)
2012-01-05T16:32:34+00:00 app[web.1]: cache: [GET /sitemap.xml] miss
2012-01-05T16:32:40+00:00 app[web.1]:
2012-01-05T16:32:40+00:00 app[web.1]:
2012-01-05T16:32:40+00:00 app[web.1]: Started GET "/sitemap.xml" for 194.44.214.138 at 2012-01-05 16:32:40 +0000
2012-01-05T16:32:40+00:00 app[web.1]: Processing by SitemapController#index as XML
2012-01-05T16:32:40+00:00 app[web.1]: Rendered sitemap/index.xml.erb (0.0ms)
2012-01-05T16:32:40+00:00 app[web.1]: Completed 200 OK in 1ms (Views: 0.4ms | ActiveRecord: 0.0ms)
2012-01-05T16:32:40+00:00 app[web.1]: cache: [GET /sitemap.xml] miss
2012-01-05T16:32:40+00:00 heroku[router]: GET www.my.url/sitemap.xml dyno=web.1 queue=0 wait=0ms service=9ms status=200 bytes=299
2012-01-05T16:32:43+00:00 app[web.1]:
2012-01-05T16:32:43+00:00 app[web.1]:
2012-01-05T16:32:43+00:00 app[web.1]: Started GET "/sitemap.xml" for 194.44.214.138 at 2012-01-05 16:32:43 +0000
2012-01-05T16:32:43+00:00 app[web.1]: Processing by SitemapController#index as XML
2012-01-05T16:32:43+00:00 app[web.1]: Rendered sitemap/index.xml.erb (0.0ms)
2012-01-05T16:32:43+00:00 app[web.1]: Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
2012-01-05T16:32:43+00:00 app[web.1]: cache: [GET /sitemap.xml] miss
2012-01-05T16:32:43+00:00 heroku[router]: GET www.my.url/sitemap.xml dyno=web.1 queue=0 wait=0ms service=7ms status=200 bytes=299
2012-01-05T16:32:44+00:00 app[web.1]:
2012-01-05T16:32:44+00:00 app[web.1]:
2012-01-05T16:32:44+00:00 app[web.1]: Started GET "/sitemap.xml" for 194.44.214.138 at 2012-01-05 16:32:44 +0000
2012-01-05T16:32:44+00:00 app[web.1]: Processing by SitemapController#index as XML
2012-01-05T16:32:44+00:00 app[web.1]: Rendered sitemap/index.xml.erb (0.0ms)
2012-01-05T16:32:44+00:00 app[web.1]: Completed 200 OK in 1ms (Views: 0.4ms | ActiveRecord: 0.0ms)
2012-01-05T16:32:44+00:00 app[web.1]: cache: [GET /sitemap.xml] miss
2012-01-05T16:32:44+00:00 heroku[router]: GET www.my.url/sitemap.xml dyno=web.1 queue=0 wait=0ms service=30ms status=200 bytes=299
Итак, как вы можете видеть, Solution Load
выдается только по первому запросу и пропускается во время остальных.У вас есть идеи, в чем проблема?
Кстати, я не пробовал предыдущую версию, но из инструментов Google для веб-мастеров казалось, что все в порядке.Может ли это быть вызвано изменениями форматирования, которые я сделал?Я добавил следующую строку в
config / initializers / time_formats.rb
Time::DATE_FORMATS[:sitemap] = "%Y-%m-%d"
и в контроллере
.to_s(:sitemap)
вызовы метода для updated_at
.
Я буду очень благодарен за любой ответ или подсказку.