Redmine2.03へアップデート

別にアップデートする必要は全くなかったのですが、gitlabを使ってみたくて、インストールしたらruby1.9.2からだって言うので。。

今回はOSにRuby1.8.7がいるので、rbenvをbrewで入れてRuby1.9.2をインストール。
#rbenvはrubyの利用バージョンを簡単に変えたり管理できたりする便利コマンドです。

案の定、passenger-install-nginx-moduleが駄々をこねやがるので、passengerはそのままでconfでpassenger_rubyだけ1.9系に指定を変えたらアッサリ動きました。

後はredmine2をgitからcloneして、bundle installコマンド叩いて、DBとかFileをコピーして各種アップグレードコマンドを叩いて終了。
なんか途中でアップグレードコマンドの名前が変わった、くらいの話しか出ませんでした。

恐る恐る起動してみると、スンナリ動いてます。奇跡です!いやあ楽になってきたなあ。

ガントチャートは移植してないのですが、一応曜日だけは標準でも表示されるようになったみたいです。だしてよ日付。

Codeigniterはじめました

Diablo3で地獄の門が開いたと思ったら、仕事でも地獄の門が開きそうな今日この頃です。
まあ数百人月の案件なので私一人が頑張った程度でどうにかなるレベルではないのですが、気合を入れるために新型のMacbookAirを注文しました。
ただ欲しかっただけという気もしないでもないですが、OSの根っ子がUnixベースなのでWEB系の開発者にはWindows機よりMacOS Xのがサーバ環境と合わせやすいので開発がし易いのです。
#bootcampでwindowsとデュアルブートという選択肢もありますし
後は単純に軽くて性能が良くて、バッテリーがそこそこ持つというノートPCの基本ですね。

そんなこんなですが最近はCakePHPからは離れてCodeigniterで仕事をしています。
なんと言いますか、Codeigniterは骨組みは用意するから後は自分で好きにしてね、な感じです。
CakePHPは建売一戸建て的な、もう大概そろってますというイメージでしょうか。

シンプルで構造の理解は早く済みましたが、ヘルパーやライブラリ周りが弱く、CakePHPなら一瞬で出来るのに自分で作るハメになるパターンが多くて苦労しましたが、他のフレームワークを使うと両方の長所、短所が分かって非常に勉強になりました。
CakePHPに比べて縛りが少ないので、未だに自作フレームワーク以外は使わないという頑固なオッサン、もとい、生粋のプログラマーの方にもオススメできます。

ただCodeigniterは次バージョンからライセンス形態が代わり、商用利用が出来なくなりそうと年末から本家で揉めている最中です。
既に最新のリリースから9ヶ月以上バージョンも上がってないので、もう終息させて違う形に持っていくのか、内部で揉めているのか勝手な妄想がよぎります。

どちらにせよライセンス形態が不明瞭な状態で使い続ける訳にもいかず、既に製品から外している会社も出ているそうです。
2系を使い続けるにしてもPHP自体のバージョンが上がり、古いバージョンがサポートから外れ、保守限界が来た時にどうすんだという心配もでますね。
#丸ごと作り直すしかありませんが

今回はサイトの規模が大きく、アクセスの捌き方がシビアだったのでベンチで高速なCodeigniterが採用された経緯があります。
私が普段やっているような案件だと、どっちでも変わらないレベルの規模だったり、Memcacheなどのキャッシュ機構を使えば、同じじゃね?的な気もしているのですが、どうなんでしょうか。

MacOS X Lionにアップグレード

MacMini2009をリポジトリ、redmineサーバにしていたのですが、ファイルサーバもUSB外付けミラーリングHDDに任せ、DLNAサーバやAirVideoサーバなど色々纏めることにしました。
サーバで使っていた時は特に問題なかったのですが、多くのMacアプリがAppStoreからのダウンロードになっていたり、それに合わせて10.6以上のMaxOSが必要だったのでアップグレードCDをAppleStoreで注文し、10.6.3に。
これで十分かと思っていたのですが、10.7(lion)からはレスキューディスクが作れる、に目が止まりました。
これまでもTimeMachineでバックアップは取っていたのですが、システムHDDが完全にお亡くなりになった場合には一体どうなるんだ?という疑問が浮かびます。
恐らく何らかの方法でHDDを換装してMacOSをインストール、そこからTimeMachineのバックアップで復旧ということになるんでしょうか。
面倒です・・・。10.7へのアップグレードはAppStore経由のダウンロードでサクっと購入可能。この後にLion 復元ディスクアシスタントから該当アプリをダウンロードしてUSBメモリをレスキューディスクにしました。これでUSBメモリから起動させ直接TimeMachineから復旧とかが出来る予定です。

そして今までMacPortsで行なっていたパッケージ管理を流行りのHomebrewに移行させました。
実験で入っていた大量のパッケージを単に大掃除したかっただけではありますが、なんか評判が良さそうだったので。

MacPortsからHomebrewへの移行メモ

こちらを参考に、MySQLは予めダンプを取ってバックアップ、Apache、PHPなどもiniファイルを退避。
後はどうにでもなりそうだったのですが、一応TimeMachineで直前をバックアップし、portコマンドからuninstallを掛け、後はザックリと/opt/local/を消します。

10.7からはruby1.8.7が同梱されているので、そこからHomebrewをインストール。
後はApache、MySQL、PHPをインストールすれば終わり。の予定でしたが、肝心のredmineに必要なmod_passengerのコンパイルがエラーで通りません。
長いの端折りますが、rubyを1.9系にしたり、Xcodeのバージョンを上げたり、下げたり、2日近く弄りましたが解決せず。
もうpassenger単独起動で良いんじゃないか・・・と諦めていたのですが、passenger-install-nginx-moduleってあるぞ?と。
passenger-install-nginx-moduleを起動するとnginxまでご丁寧にコンパイルして入れてくれるので、そのままお任せしてみるとアッサリ入りました。
PHPはphp-fpm経由で起動させ、Rubyはpassennger経由の起動となります。

あー長かった。

brewではパッケージのバージョン毎にディレクトリが作られインストールされ、/usr/local/binにはシンボリックリンクを作成してくれます。
バージョンの切り替えが簡単で良いですね。

それにしてもruby周りの設定は毎回ハマります。
最近はbundlerというgemライブラリ周りの依存関連をコマンド一発でどうにかしてくれるツールが出て、だいぶ楽になりました。
redmineのバージョンアップ毎にこれが繰り返されるため、rubyのコードは1行も書いたことがないのに設定の知識だけが上がっていく今日この頃です。