ようやく仕事でもRails3になったので、しばらくはプライベートではC#で色々やりたい。
というわけで、ASP.NET MVC3で噂のビューエンジンRazorを使用して作ったWebアプリをLinuxのmono
で動かしてみました。

さすがにMonoDevelop(マック版)はMVC3やRazorにはまだ対応してないので、開発はVisualStudio2010で作成して、それをLinux(Cent5.5)のMonoにデプロイすることに。

開発:Windows7, VS2010, MVC3, Razor
ホスト: Linux(Cent5.5), Apache

とりあえず動作確認のため、デフォルトのMVCプロジェクトをコンパイルしてLinuxにコピー。
でmonoでASP.NETを動かすには、
http://www.mono-project.com/ASP.NET
ここに書いてあることによると、
mod_mono
xsp
が必要とのこと。
それぞれソースを落としてコンパイル&インストール。
インストールが完了すると、mod_mono.conf というApacheの設定ファイルが出来ているので基本的にそれはそのままでOK。
私の場合は /etc/httpd/ 直下にできていたので、conf.d下に移動。

続いてサイトの説明を読んでいくと、何やらAutoHostingなるものがあるらしい。
http://www.mono-project.com/AutoHosting
これによるとAutoHostingなら後々ASP.NETプロジェクトをホストする場合でもいちいちApacheの設定ファイルを弄る必要がなくて便利ですよー、とのこと。指示通りに設定ファイルをいじっていたら、途中でMVCプロジェクトの場合はルーティングにファイル拡張子が使用されないから云々とかで、AutoHostingは推奨しません、だって。かなりガッカリ。
で、仕方ないので、従来通りの方法でASP.NETのプロジェクト単位でApacheの設定ファイルを作ることに。

http://go-mono.com/config-mod-mono/
このサイトでは必要な項目を入力すればそれを元に設定ファイルを作成してくれるようなので、サーバー名とかプロジェクトのディレクトリパスとか必要な項目を入力して作ってもらう。
mod-mono-serverのパスが/usr/binになってたり若干自分の環境と異なっているので、そこは自分で修正。更にmod-mono-server2となっていたのをmod-mono-server4に変更。
そいつをコピーして、Apacheのconf.d下に my_mvc_project.conf みたいな名前のファイルを作ってそこに保存。

Apache再起動してブラウザで表示してみると、なんかエラー。
リモートマシンなのでエラーの内容がわからないため、Web.config の <customErrors mode="Off" />にして再度トライ。
なんかDLLが見つからないよーみたいなことを言われるので、VS2010に戻って必要なDLLを参照追加して、更にそいつのプロパティでローカルコピーをTrueにして再デプロイ。
するとまた別のDLLがないよーと言われるので、その都度同様の作業を繰り返す。
結局Windowsから持っていかなきゃならないDLLは
  • System.Web.Mvc.dll 
  • System.Web.Razor.dll 
  • System.Web.WebPages.dll 
  • System.Web.WebPages.Deployment.dll 
  • System.Web.WebPages.Razor.dll
  • System.Data.Entity
  • System.Web.Helpers.dll
 Entityとか使ってないんだけどなー、、、。

でもとりあえずページは表示されました。