Rails 4.0.0 でコントローラーに GET リクエストを行うと、何故か複数回コントローラーが実行される

Rails 4.0.0 で特定のコントローラーに GET リクエストを送ると、何故か複数回コントローラーが実行される現象に遭遇しました。しかも直接 URL に GET リクエストを送ると、1度だけ実行されるのですが、HTML の a タグを使って他のページからのリンクで移動するかたちで該当の URL を実行すると複数回実行されるという謎の挙動です。

コントローラーの処理の途中に、ログに文字列を残す処理を書いてログを確認すると複数回分ログに残っていますし、メールを送る処理を書くとメールが複数通数送信されているので、複数回実行されていることは間違いありませんでした。

中の処理の書き方がまずいのかと思っていろいろと変更しても結果に変わりがないため、Rails を最新バージョンの 4.1.5 にアップグレードしたところ、その現象は解消されました。

ターミナルの現在のディレクトリ名や $ が表示される部分(PS1)の色を変えると見やすい

ターミナルで作業をしていると、どの行が自分が実行したコマンドでどの行が標準出力なのか分かりづらかったので、これの色を変えると見やすくなりました。

f:id:suzuki86:20141102173141p:plain

ターミナルの現在のディレクトリ名や $ が表示される部分は PS1 と呼ばれ、PS1 という変数に書式が定義されています。デフォルトで定義されている PS1 に色をつけるだけなら簡単にできました。下記のように .bashrc にて PS1 の値を上書きします。(Ubuntu 14.04で試しました。)

export PS1="\[\e[1;32m\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ \[\e[00m\]"

PS1 の色については下記の記事が参考になりました。
http://babyp.blog55.fc2.com/blog-entry-663.html

追記

tmux を起動した時に反映させるには .bash_profile にも書く必要がありました。

Rails 4 で shared_context を使ったテストを実行すると 「Could not find shared context "hoge"」 というエラーが出るときの対処方法

環境

現象

bundle exec rspec を実行すると、「Could not find shared context "hoge"」 というエラーが表示される。

対処方法

spec_helper.rb の RSpec.configure do |config| の外側に下記を記述することでエラーが出なくなった。

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

なぜ解決されるのかは調査中。

参考

ruby on rails - Rspec - How to include a shared_context in a shared_examples - Stack Overflow

初級者から中級者にあがるための英語を勉強するのに engVid シリーズが良い感じ

初級者から中級者にあがるための英語を学習するのに engVid というシリーズが良い感じです。英語の文法、熟語の意味や使い分け等を全て初級英語で解説してくれる動画です。全て初級英語で解説されているってところが重要で、初級すぎず、上級すぎない絶妙な位置にいる人の英語力を高めるのに丁度良いと思いました。

特徴

  • 無料
  • 解説は全て初級英語
  • 解説者が日本人ではない
  • シリーズ化しておりカバー範囲が広い
  • 解説内容を理解しているか試すミニテスト付き

qrank でユーザーのフォロー数、フォロワー数、投稿数のランキングを見られるようにした

3分に1ユーザーという遅さでデータを更新していますが、そのうち大体のユーザーのデータが取得されます。このランキングはユーザーの情報を直接 API で取得しているので、集計の数値はストック数ランキングに比べて正確です。

フォロー数
http://qrank.wbsrv.net/users/?orderby=following_users

フォロワー数
http://qrank.wbsrv.net/users/?orderby=followers

投稿数
http://qrank.wbsrv.net/users/?orderby=items

ストック数ランキングについても、記事のデータを収集する方法を改善してよりリアルタイム性を高める予定です。

qrank をマイナーアップデートした

Qiita の人気記事をランキング形式でチェックできる qrank をマイナーアップデートしました。

変更したところ

  • 更新頻度の高くないユーザーランキングをトップページから削除した。代わりにリンクをサイドバーへ移動させた。
  • 記事ランキングの「昨日」が当日の 0 時からのランキングになってしまっていたのを修正した。
  • 記事ランキングの「昨日」「7日間」「30日間」でもはてブによるソートができるようにした。
  • ユーザーランキングではてブ数を集計するようにした。

今後

ストック数とはてブ数を WordPress のカスタムフィールドに保存してるのですが、集計時の負荷が高いので困っています。(JOIN する SQL を発行すると処理時間がかかりすぎてタイムアウトする)共有サーバーなので仕方ないのですが、データを外部の VPS に保存して API 経由で持ってくるなどしようと思います。それか、WordPress の wp_posts に独自のフィールドを追加すると SQL で JOIN しなくて良くなるのでたぶんパフォーマンスがあがりますが、CMSスキーマに手を入れるのは抵抗を感じています。