開発中の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)
Homecontroller
のindex
アクションにアクセスしたところ、何故かログに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回目)
-
background-image: url()
の箇所でもう一度レンダリングする(2回目)
また、今回のケースではbackground-image
が原因でしたが、href
などでも発生したことがあるようです。
詳しくは参考を確認ください。
参考
調査したところ、結構前からある問題みたいですが、未だ対応されてないんでしょうか。。。