Rails
HTML5

ページアクセスでリクエストが2回発生する

More than 1 year has passed since last update.

開発中のRailsアプリケーションで特定のページにアクセスするとリクエストが2回発生するケースがありました。
この記事は、その時の原因について書いたものです。
同じような現象に悩んでいる方の参考になれば幸いです。

注意:内容については実際のソースコードではなく、サンプルを用いて記述しています。

環境

  • Rails 5.1.0
  • Ruby 2.4.0
  • OSX
  • ブラウザ( GoogleChrome, Firefox, Safari )

発生内容

ログ
Started GET "/" for 127.0.0.1 at 2017-05-01 16:12:57 +0900
Processing by HomeController#index as HTML
  Rendering home/index.html.erb within layouts/application
  Rendered home/index.html.erb within layouts/application (7.5ms)
Completed 200 OK in 119ms (Views: 106.6ms)


Started GET "/" for 127.0.0.1 at 2017-05-01 16:12:58 +0900
Processing by HomeController#index as HTML
  Rendering home/index.html.erb within layouts/application
  Rendered home/index.html.erb within layouts/application (0.8ms)
Completed 200 OK in 64ms (Views: 52.0ms)

Homecontrollerindexアクションにアクセスしたところ、何故かログに2回アクセスが発生していました。
このままでは無駄にリソースを使うどころか、もしアクセス時に何かしらデータベースにデータを挿入する場合には2重で作成されてしまいます。

原因

結論としてviewが原因でした。
サンプルのため、かなり簡略化していますがコードはこんな感じです。

index
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
<div style="background-image: url();"></div> <%# ココ %>

background-image: url()の箇所でurlの指定がないからでした。

  1. アクセスする
  2. レンダリングする(1回目)
  3. background-image: url()の箇所でもう一度レンダリングする(2回目)

また、今回のケースではbackground-imageが原因でしたが、hrefなどでも発生したことがあるようです。
詳しくは参考を確認ください。

参考

調査したところ、結構前からある問題みたいですが、未だ対応されてないんでしょうか。。。