Posted at

ページアクセスでリクエストが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などでも発生したことがあるようです。

詳しくは参考を確認ください。


参考

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