15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

開発中の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などでも発生したことがあるようです。
詳しくは参考を確認ください。

参考

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

15
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?