Sooey

2011-09-29 12:06:23 +0900

いまどきのRails/Rubyな開発環境を紹介したエントリがあった。

Mac or Ubuntu、Homebrew、Bundler、Powとほぼ予想通りなんだけど、複数のRubyインタプリタの切り替えにはRVMじゃなくてrbenv/ruby-buildを挙げている。その理由は以下の通り。

rbenv is a very young project. I've been using it for over a month now and find it much more to my liking. Additionally, I did not appreciate the reaction of RVM's author Wayne Seguin. To me, when you build open source software, you should expect (and hope) that something better comes along to replace your software. I have no interest in supporting projects that are just as much about stroking the author's ego as getting things done. Sam Stephenson has proven with Prototype.js that he is a pragmatic developer that is open to alternatives. That is an attitude I can get on board with.

RVMの作者がわざとrbenvを無視しているということでもないのだろうけど、"I have no interest in supporting projects that are just as much about stroking the author's ego as getting things done." という考え方には同意できるかな。

2011-09-28 19:33:21 +0900

WebサービスAPIにおけるバージョン情報の指定方法

Herokuアドオンとしても提供されているFlying SphinxのAPIを開発したデベロッパーの方が、APIのバージョニングについて面白いエントリを書いていました。

APIのバージョンを明示してアクセスする場合は、

https://api.twitter.com/1/statuses/user_timeline.json

というようにURLにAPIバージョン(この場合は1)が含まれるようなスタイルが多いですが、ScalariumというサービスのAPIでは、HTTPヘッダに

Accept: application/vnd.scalarium-v1+json

というようにしてAPIバージョンを含める仕様となっています。

後者についてはAsk HN: Version numbers in a REST APIで、URLのパスがリソースにのみフォーカスするようになるという点でよりRESTfulなアプローチだ、という指摘があり、このデベロッパーさんもRailsで後者のアプローチをとることにしたようです。

実装方法が「独自のConstraintクラスを作成して、Railsのルーティングにconstraintとしてそれを指定する」というもので、コード自体もなかなか面白かったです。

2011-09-26 12:18:30 +0900

Emacs 23でjs2.elをバイトコンパイルしたら、max-specdl-sizeが足りないというエラーが出たので、Issue 68 - js2-mode - Variable binding depth exceeds max-specpdl-size - Enhanced JavaScript IDE Emacs Modeを参考に、あらかじめ以下のようにしておいたらうまくいった。

(setq max-specpdl-size 50000)
(setq max-lisp-eval-depth 50000)

最初、参考URLにあるようにmax-specdl-size100000にしたらEmacsが落ちたので、50000にしておいた。

2011-09-20 17:55:32 +0900

Rails 3.1.0でrake assets:precompileするとプリコンパイルに失敗してしまうバグの話。

Rails 3.1.0でAsset Pipelineを使っている場合にrakeのassets:precompileタスクを実行すると、

$ RAILS_ENV=production bundle exec rake assets:precompile
rake aborted!
foo.png isn't precompiled
  (in /Users/juno/src/rails-app/app/assets/stylesheets/common.scss)

Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

という感じで、なんでもない画像ファイルのプリコンパイル(public/assetsへのコピー)でエラーが発生するケースに遭遇しました。

どうやらプリコンパイル時にconfig.assets.compileの値がfalseだと発生するようで、Upgrade to Rails 3.1.0 from rc6, asset precompile fails - Stack OverflowによるとRails 3.1.0のバグということです。

リポジトリのコードでは既に修正済みのようなので、とりあえずプリコンパイルをする時だけconfig/environments/production.rbconfig.assets.compiletrueにすることで対処しておくことにしました。

2011-09-19 01:58:54 +0900

Pivotal Labsのブログにあるエントリのうち、SF StandupとかNYC Standupというタイトルのエントリがとても参考になるのでおすすめ。

たぶんPivotal Labsの各オフィスでのデイリースタンドアップで話題にあがったことをまとめているんだと思うけど、RailsやJavaScript、TDD系のTipsなどが頻繁に紹介されています。

たとえば9月14日のNYC Standupの内容は

  • Capybaraでのテスト中にポップアップウィンドウを制御するにはどうすればいい?
  • helperのspecでcurrent_userのスタブを設定する方法は?
    • spec内でhelperオブジェクトの#current_userをスタブにしてみては

といった感じ。