Circle CIにsshで入れるのめっちゃ便利

今更ながら。

ローカルでは問題ないテストがなぜかCircle CI上で失敗する。

原因は以下の凡ミスだったんだけど、sshで入って直接いじれたおかげですぐ解決した。


Time.parse('2015-02-24 09:49 +0900')

ローカルだとoffsetの指定が無視されても日本時間が使われるのでテストが通ってしまっていた。

Time.parse('2015-02-24 09:49 +9:00')

使い方はとても簡単。
Rebuild & enable sshをクリックして表示されるsshコマンドで、ログインできる。
その後、$ cd ~/リポジトリ名するとそこにはRails(などの)環境があって普通にいじれる。

いやぁ便利。

アカウント名のValidationエラーメッセージ

いつもどう書くか迷うので有名どころで、簡単にエラーを表示できるサービスのを確認してみた。

GitHub

  • Username may only contain alphanumeric characters or dashes and cannot begin or end with a dash

Twitter

  • Invalid username! Alphanumerics only and not all numeric.

Yahoo

  • Your username must begin with a letter.
  • Your username cannot end in an underscore or a period.
  • Only letters, numbers, underscores, and one period are allowed.

GitHubのが1文に収まってていい感じ。

undefined method `RecordNotFound' for ActiveRecord:Module

raise ActiveRecord::RecordNotFound if @foo.blank?

みたいなことをやろうとしたら上記のエラーが発生。
一瞬、なんで??ってなった。

原因は、

raise ActiveRecord::RecordNotFound @foo.blank?

になっていたため。

ifがないので、

raise ActiveRecord::RecordNotFound(@foo.blank?)

と解釈されてしまっていた。

New Relicにいつまでたってもデータが飛ばない

$ cap production unicorn:stop unicorn:start

でいけた。restartだとダメだった。

古いgemを使ってると、Unicornでデータが飛ばないというのも別件でハマった。
No data with Unicorn | New Relic Documentation

exception reentered

RailsでページをTree構造にしたくて、parent_idというカラムを追加して親を選択するようにした。
目視のテストではうまく行っているように見えたが、RSpecを実行するとFeature specsでexception reenteredというエラーが発生した。

一瞬「何これ?」と思ったけど、view内でrenderが無限に呼び出されてるとこのエラーが起きるらしい。

collection_selectinclude_blanktrueにしていなかったため、自分自身が親として設定されて、無限ループになっている、というオチだった。

そもそもValidationも設定すべきところなので、そこも修正。
無事、解消。


before_save内で誤って無限ループになった時にもこのエラーになった。stack level too deepではなく。