понедельник, 23 мая 2011 г.

Краткий конспект по запуску MVC на Mono (Ubuntu)


Краткий конспект по проблемам, с которыми сталкивался разворачивая MVC3-сайт на Ubuntu с nginx и Mono


1) Ставим последнюю версию Mono wget --no-check-certificate https://github.com/nathanb/iws-snippets/raw/master/mono-install-scripts/ubuntu/install_mono-2.10.sh когда выйдет следующая версия гуглить на тему install_mono.
2) Деплоим проект на сервер. Должна получиться следующая структура
  /
   - App_Code (копируем из проекта, если используем шареные хелперы)
   - Views (папка с вьюшками, копируем из проекта)
   - bin (папка с бинарниками. копируем из проекта)
   - Default.aspx (копируем из примера приложения, см. ниже)
   - Web.config  (копируем из проекта)
   - Global.asax (копируем из проекта)

3) В MVC проекте ставим CopyLocal=true для библиотек: System.Web.Helpers, System.Web.Mvc, System.Web.Razor, System.Web.WebPages,   System.Web.WebPages.Razor, System.Web.WebPages.Deployment. Здесь важен не CopyLocal, а тот факт, чтобы они попали в папку bin на сервере.

4) Копируем в папку bin файл Microsoft.Web.Infrastructure из установленной версии Mono (/opt/mono/lib/gac...). Если библиотеки пункта 2 должны быть Майкрософтовские, то эта должна быть Моновская!

5) Настраиваем nginx. Позже здесь наверное будет ссылка :)

Возможные ошибки:
1) "The view '***' or its master was not found or no view engine supports the searched locations."
не хватает директив @using во вьюшке. Проверьте наличие недефолтных неймспейсов в Views/Web.Config.



Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server" languange="C#">
public void Page_Load(object sender, System.EventArgs e)
{
// Change the current path so that the Routing handler can correctly interpret
// the request, then restore the original path so that the OutputCache module
// can correctly process the response (if caching is enabled).

string originalPath = Request.Path;
HttpContext.Current.RewritePath(Request.ApplicationPath, false);
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
HttpContext.Current.RewritePath(originalPath, false);
}
 </script>



Комментариев нет:

Отправить комментарий