Rails, кажется, обслуживает страницу дважды - PullRequest
19 голосов
/ 26 апреля 2011

это то, что я вижу в своем локальном файле журнала, когда я делаю одностраничный запрос:

Started GET "/" for 127.0.0.1 at Mon Apr 25 22:12:22 -0700 2011
  User Load (0.9ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
  Processing by PagesController#beta as HTML
Rendered pages/beta.html.erb within layouts/beta (16.2ms)
Completed 200 OK in 23ms (Views: 18.8ms | ActiveRecord: 7.7ms)


Started GET "/" for 127.0.0.1 at Mon Apr 25 22:12:23 -0700 2011
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
  Processing by PagesController#beta as */*
Rendered pages/beta.html.erb within layouts/beta (17.9ms)
Completed 200 OK in 27ms (Views: 21.5ms | ActiveRecord: 6.6ms)

У кого-нибудь есть идеи, что может быть причиной этого?Процессная линия интересна?

PagesController#beta as HTML
PagesController#beta as */*

Что это значит?

Ответы [ 5 ]

39 голосов
/ 26 апреля 2011

Я видел это из-за тега img с пустым атрибутом src. При присвоении тега img, script, link или аналогичного ему атрибут src или href ="" будет преобразован в текущую страницу. Таким образом, он попытается загрузить страницу во второй раз при попытке загрузить ресурс. Это также может быть свойство CSS url() или вызов AJAX.

Один простой способ определить это - временно поместить что-то вроде <base href="http://example.com" /> в ваш раздел <head>. Это будет префиксом любых ссылок на странице, что должно препятствовать повторному вызову вашей локальной страницы, если это проблема такого рода.

Я также видел некоторые расширения браузера, которые запрашивают страницу отдельным запросом. Я заметил это специально с расширениями Уведомление веб-сервера и Уведомление веб-технологии для Chrome. Попробуйте окно "инкогнито" или отдельный браузер и посмотрите, получите ли вы тот же результат.

8 голосов
/ 15 декабря 2013

Я испытал это раньше, и виновником была плохая реализация Turbolinks (с моей стороны).

Я должен был изучить правильный способ заставить Turbolinks работать (я включил мои учебные ресурсы в нижней части) ... посмотрите видео Райана Бейтса , чтобы узнать, как выглядит правильно работающая реализация.

Проблема / Виноват:

Это Javascript.Как описано на странице Turbolinks Github ...

При использовании Turbolinks страницы будут меняться без полной перезагрузки, поэтому нельзя полагаться на DOMContentLoaded или jQuery.ready () длявызвать ваш код.Вместо этого Turbolinks запускает события в документе, чтобы обеспечить привязку к жизненному циклу страницы.

В основном все, что подразумевает « запуск после загрузки DOM / страницы », будет прерываться / не работать- как и ожидалось ... это приведет к тому, что Turbolinks не будут эффективными.А так как Turbolinks терпит неудачу, ваш браузер дважды загрузит страницу (проверьте логи / консоль), чтобы скрыть проблему для вас.

В моем случае я смог заметить вышеупомянутое поведение в «режиме инкогнито»... весь мой Javascript, который зависел от документа / DOM / page-ready .... сломался.Итак ...

Решение:

Если у вас есть что-то подобное в вашем javascript (ниже) ...

$(function() {
  alert("DOM is ready!");
});

$(document).ready(function() {
  alert("DOM is ready!");
});

jQuery(document).ready(function() {
  alert("DOM is ready!");
});

Изменить наэто ...

$(document).on('page:change', function() {
  alert("DOM is ready!");
});

Турболинки на самом деле не запрашивают совершенно новую страницу, поэтому вы заметите, что ваш Javascript работает только при полной загрузке страницы, но не при нажатии на ссылку с включенной турболинкой.

Это означает, что мы должны полагаться на Turbolinks для определения того, что DOM готов на самом деле.

На мой взгляд, текущие ответы (могут) неверны, так как у меня Chromeрасширения, пробелы и мои проблемы исчезли.

Дополнительная информация:

3 голосов
/ 10 января 2014

У нас была эта проблема с пустым фоновым URL-адресом, заставляющим перезагрузить страницу с помощью rails.

Если параметр cover_url был пустым, это привело бы к перезагрузке страницы.

"style" = "background: url( #{cover_url} );"
1 голос
/ 04 февраля 2013

Такое поведение происходило у меня из-за расширения SPOF-O-Matic Chrome.Отключение убрало лишний запрос.Вы можете отключить его в Chrome: // extensions /

0 голосов
/ 11 апреля 2017

Следуя приведенным выше подсказкам, я начал отключать расширения Chrome по одному. В конце концов я отключил расширение AdBlock Plus, и это вылечило проблему. Странная вещь, когда я снова включил расширение, оно все еще работало. Я понятия не имею, что это могло быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...