トップ 追記 RSS feed

HsbtDiary


2015/03/27 (金) [長年日記]

Rails 4.1 to 4.2 でハマったポイント

最近は OpenStack とかインフラ方面を色々やっていたけど、たまには Rails もキャッチアップしないとな〜と Rails アップグレードをさくっとやってみた。社内のいくつかのサービスを Rails 4.2.1 にしてみた所、いくつかのサービス共通でハマる箇所があったので紹介する。

controller/requests tests/spec の url path

Rails 4.1 までは

get "#{foo.url}/..."

のように、get で呼び出す url path の先頭に "/" を付けなくても動いていたけど、Rails 4.2 からは get "/#{foo.url}/..." というように明示する必要がある。どのサービスでも2-3つ、つけ忘れている物があってテストが落ちていた。

destroyed な record に update_column は使えない

Rails 4.2 では update_column に record が destroyed かどうかのチェックが入るようになったので、いわゆる >>> 論理削除 <<< なことを paranoia などでやっている場合に、論理削除状態の record を更新しようとすると raise してしまう。

論理削除状態なのに何で更新するんだよ!!1みたいな話もあるけど、ユースケースとしては

  • 何かしらのデータを削除するけど、ユーザーが何かしらの操作をすれば復活することができる
  • 復活操作をしない場合は一定期間後にレコードをマークして、バッチで物理削除する

みたいな時のマーク処理で死ぬことになる。

update_column では死ぬけど、update_attribute では死なないのでそっちに置き換えて何とかした。

destroyed な record や Time オブジェクトを ActiveJob に渡せない

ActiveJob integration を ActionMailer で使おうとしたときに、destroyed なレコードを渡してメールを送るだとか、時間を渡して何かしようとした時に、global_id のシリアライズで死んでしまって ActiveJob 経由でのメール送信を実行できない。これ仕様なんだろうけどユースケースとしてはかなり辛い。

しょうがないので delayed_job とかが提供している ActionMailer integration を使って回避した。

html 生成やタグの処理

html 生成時に id と href の順序が変わったとか、<br /><br> に strip されるようになったことで、生成される html をテストしている箇所がいくつか落ちていたので雑に直した。

url_for のインタフェースが変わった

ssl_requirements が url_for をモンキーパッチングしていて爆死した。しょうがないので、この機会に全部 force_ssl に書き換えることで問題そのものを無くした。

Tags: ruby rails

PS4 と Vita のアップデート

PS4 は 2.50, Vita は 3.50 が来ていたのでアップデートをしておいた。


2015/03/26 (木) [長年日記]

rubyci に icc のビルド結果を追加した

昨日、あれこれ準備していた icc を使って chkbuild を実行した結果を rubyci に追加した。

http://rubyci.blob.core.windows.net/icc15-x64/ruby-trunk/log/20150326T042715Z.fail.html.gz

chkbuild でコンパイラを切り替えるには単純に CC=icc ruby chkbuild でよかった。便利。ぱっと見ると float 周りで結構テストが落ちてる感じ。


2015/03/25 (水) [長年日記]

Intel C Compiler を導入中

先日、 icc(Intel C Compiler) っていくらくらいするんだろうなあと調べてみて、OSS の開発(非商用)ならライセンスが無料というのを発見したので、早速 CRuby の評価用に申し込んでみたところ、今日 accept されてライセンスコードが送付された。

linux でパッケージマネージャ以外のインストーラを使ってインストールするというのが久しぶりだったのだけど、とりあえず /opt/intel の下にぶちこむ形でインストールして無事 icc が使えるようになった。icc -vの結果はこちら

$ icc -v
icc version 15.0.2 (gcc version 4.8.0 compatibility)

なるほど、gcc compatibility というのが出るのか。CC=icc として ruby をビルドできるようになったので、結果を rubyci に突っ込んだりしよう。これ、icc でだけ見たい何かを調べるにはどうすると面白いのかな。