BlogEngine.NETをMonoで動かすのは、やはりムズイです。環境は故合って、Mono 1.2.4 & BlogEngine.NET 1.4.5 でやってますが、うまく動いてくれません( ̄□  ̄||
BlogEngine.NET Modifications for Mono/Linuxを参考に、以下やったこと、binのリネーム以外は全てWeb.Configの修正です。
- System.Managementの読み込みを削除
- Mono 1.2.4では使えないNamespaceのようで、かつDBを使用せずXMLでやれば不要そうだったので削除。
- Description属性を4つ削除
- Web.Configのprovider定義タグではdescription属性が使えないらしいので削除。
- DBBlogProviderタグ削除
SqlMembershipProvider削除
DbMembershipProvider削除
SqlRoleProvider削除
DbRoleProvider削除 - XMLでやれば不要そうで、かつ動作不良の原因ぽかったので削除。
- Compression HttpModuleを削除
- ページに「?」が表示されるらしいので削除。
- Binディレクトリをbinにリネーム
- Linuxのファイル名が大文字、小文字を区別するので変更。
- httpRuntimeを削除
- クリエモンと同居させてるからか、Machine.Configで、httpRuntimeを読む時エラーになったのでWeb.Configのを削除したらなぜか直ったw。
- StrageLocationを仮想パスでなく絶対パスで書く
- Web.Configに「StorageLocation="~/App_Data/"」とあって、これを絶対パスで書かないとエラーになる部分があったので変更。しかし、絶対パスにしてもエラーになった・・・orz
最後のは、Mono1.2.4のHostingEnvironment.MapPathで、仮想パスをハジくチェックをしているのが原因だが、Mono 2.0のソースを見たらチェックしなくなっていたので、2.0以上でやらないと動かせないらしい。
public static string MapPath (string virtualPath)
{
if (virtualPath == null || virtualPath == "")
throw new ArgumentNullException ("virtualPath");
if (UrlUtils.IsRelativeUrl (virtualPath)) {
string msg = String.Format ("The relative virtual path '{0}', is not allowed here.", virtualPath);
throw new ArgumentException (msg);
}
HttpContext context = HttpContext.Current;
if (context == null)
return null;
return context.Request.MapPath (virtualPath);
}
というわけで、Mono 2.4も出てるらしいので、もうちょっとバージョンが上がったMonoVMで動かしてみようと思います。でも前、クリエモンを乗せたらうまく動かなかったんだよな~( ̄~ ̄)
あと、タイミングのいいことに、昨日、BlogEngine.NETが9ヶ月ぶりにバージョンアップして1.5になったそうなので、そっちも試してみようと思います。昨日、インストールがうまくいってたら、即、アップデートが必要だったと思えば失敗してよかったのかな(^^)