トップ «前の日記(2012/09/26 (水) ) 最新 次の日記(2012/09/28 (金) )» 編集 RSS feed

HsbtDiary


2012/09/27 (木) [長年日記]

[30days][ruby][rails] 30d.jp の Ruby バージョンを 1.8.6 から 1.8.7 にした

同僚の刺身さんが札幌Ruby会議で予告していた通り、30d.jp を動かしている Ruby を 1.8.6 から 1.8.7 にバージョンアップした。実際のメンテナンスはアプリケーションサーバー複数台を上手く切り替えて実施したので、サービスの停止時間は無く実行できた。

いやー、ここまでくるのは結構大変だったのでした。

  • まず必要なライブラリの全貌を把握している人がいない、のでしょうがないから Gemfile をただの gem インストーラとして使いつつ、テストやサーバー起動で require に失敗したライブラリと探して持って来てはちゃんと動くバージョンを調べながらライブラリを揃えた
  • 環境構築が極めて大変、なんと本番で動いているDBのスキーマ情報がリポジトリに入って無い!!!しょうがないので、sql でダンプしたものでデータベースを構築、そこから schema.rb を生成してそれを架空の migration version として生成した
  • 1.8.6 で bundle を実行すると SEGV で死ぬことが往々にしてあるので、1.8.7 で bundle --path したものをハードコピーして何とか動かしたり
  • そもそも Rails 2.0 なので 1.8.7 で動かない! まずは Rails 2.1 + 1.8.6 に全力でアップグレード
  • 1.8.6 と 1.8.7 は互換性はばっちりだから問題はおきんだろと思っていたら制御コードの正規表現マッチが変わっていて、そこを直したりもした。テストも補充したぞ。
  • OS が C から始まる名前を言ってはいけないOSなので、1.8.7 を使うことがそのままだと出来ない。これは @lamanotrama さんと @tnmt さんの二人と協力しながら puppet manifest をせっせと整備して 1.8.7 と passenger-3.0.17 をえいやっとプロビジョニングできるようにした

次は年内中に Rails 2.3 へのアップデート、ここはアプリケーションレベルで結構差分が大きいので今回よりもテストやサーバー環境の方でさらに作戦を練っていくつもり。盛り上がってきた!