2011-04-26 18 views
18

esto es lo que veo en mi archivo de registro local cuando hago una única solicitud de página:rieles parece estar al servicio de la página dos veces

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) 

Alguien tiene alguna idea de lo que podría ser la causa de esto? la línea de procesamiento es interesante?

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

¿Qué significa eso?

+0

¿Cómo es su controlador? –

+0

Lectores, no confunda esto con [Rails imprimiendo cada línea de registro dos veces] (https://stackoverflow.com/questions/19900093/rails-logger-appears-to-be-duplicating-log -lines). – Zaz

Respuesta

34

He visto esto suceder debido a una etiqueta img con un atributo en blanco src. Dando un img, script, link o una etiqueta similar un src o href atributo ="" se resolverá en la página actual. Por lo tanto, intentará cargar la página una segunda vez mientras intenta cargar el activo. También podría ser una propiedad CSS url() o una llamada AJAX.

Una forma fácil de decir es poner temporalmente algo como <base href="http://example.com" /> en su sección <head>. Esto incluirá el prefijo de cualquier enlace en la página, lo que evitará que se llame a su página local dos veces si es ese tipo de problema.

También he visto algunas extensiones de navegador que consultan la página en una solicitud por separado. Lo he notado específicamente con las extensiones Web Server Notifier y Web Technology Notifier para Chrome. Pruebe con una ventana de "incógnito" o un navegador por separado y vea si obtiene el mismo resultado.

+1

elevó su respuesta, ya que el plugin w3c validator en línea para Chrome fue el culpable en mi caso. Gracias por la visión. –

+1

Mi culpable fue Firebug for Chrome. Intenta deshabilitarlo. – muirbot

+0

SPOFMATIC para mí – TomFuertes

0

Este comportamiento me estaba ocurriendo debido a la extensión de Chrome SPOF-O-Matic. Al deshabilitarlo, se eliminó la solicitud adicional. Puede desactivarlo desde chrome: // extensions/

8

Experimenté esto antes y el culpable fue la pobre implementación de Turbolinks (en mi extremo).

Tuve que aprender la forma correcta de hacer que Turbolinks funcione (he incluido mis recursos de aprendizaje en la parte inferior) ... watch the Ryan Bates video para ver cómo funciona una implementación que funcione adecuadamente por cierto.

Problema/culpable:

Es Javascript. Como se describe en la Turbolinks Github page ...

Con páginas Turbolinks cambiará sin una recarga completa, por lo que no se puede confiar en DOMContentLoaded o jQuery.ready() para activar el código. En cambio, Turbolinks activa eventos en el documento para proporcionar ganchos en el ciclo de vida de la página.

Básicamente cualquier cosa que implica 'fuga después de DOM/página se carga' romperá/no-trabajo-como-se esperaba ... esto hará que Turbolinks a no ser eficaz. Y dado que Turbolinks fracasa con elegancia, su navegador cargará la página dos veces (compruebe los registros/la consola) y le ocultará el problema.

En mi caso, pude observar el comportamiento anterior cuando estaba en modo 'incógnito' ... todo mi Javascript que dependía del documento/DOM/listo para la página .... se rompió. Así que ...

Solución:

Si tienes algo como esto en su Javascript (abajo) ...

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

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

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

Cambio a esta ...

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

Turbolinks no en realidad no solicite una página completamente nueva por lo que se dará cuenta de que su Javascript sólo funciona en carga la página completa, pero no cuando haces clic desde un enlace activado Turbolink.

Lo que significa que debemos confiar en Turbolinks para detectar qué DOM realmente es.

En mi opinión, las respuestas actuales son (podría) mal, ya que tengo extensiones de Chrome, blank-hrefs y mis problemas se han ido.

Más información:

+0

Este también fue mi problema. Comentando el javascript Turbolinks inmediatamente causó que la doble carga desapareciera. –

2

Hemos tenido este problema con un espacio en blanco css fondo url, forzando una recarga de la página con los carriles.

Si el parámetro cover_url estaba en blanco, forzaría la recarga de una página.

"style" = "background: url(#{cover_url});" 
0

Siguiendo con las pistas anteriores, comencé a deshabilitar las extensiones de Chrome una por una. Eventualmente deshabilité la extensión AdBlock Plus y esto solucionó el problema. Lo extraño es que cuando volví a habilitar la extensión, aún funcionaba. No tengo idea de lo que podría haber sido esto.

Cuestiones relacionadas