Heroku запускает запрос только один раз после развертывания - PullRequest
0 голосов
/ 05 января 2012

Я пишу приложение на 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.

Я буду очень благодарен за любой ответ или подсказку.

1 Ответ

2 голосов
/ 05 января 2012

Ваш код контроллера - все виды фруктов. По какой-то причине у вас есть def index дважды (внутри себя). Вы должны использовать:

def index
    @solutions = Solution.find(:all, :order => "updated_at DESC") 
    @base_url = "http://#{request.host_with_port}"
    headers['Content-Type'] = 'application/xml'
    respond_to do |format|
      format.html
      format.xml
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...