Temas etiquetados como: ‘asp.net mvc’

Deploy de ASP.Net MVC en Apache con mod_mono

3 enero, 2012

Lo que voy a escribir aquí no es una guía de como instalar Mono ASP.Net con MVC sobre apache con mod_mono, aunque la escribiré, sino como hacer el deploy de una aplicación. Cuando montamos un sistema Mono ASP.Net con MVC sobre apache con mod_mono, hay que tener 3 cosas en cuenta para su correcto funcionamiento, son pequeños detalles pero que te pueden dar algún que otro quebradero de cabeza. Las 3 cosas a tener en cuenta son:

  • Apache no entiende que tu app es MVC, por lo que hay que decirselo.
  • Apache ni mod_mono son capaces de dictaminar tu index
  • Siempre hay que tener algo para recompilar el backend en caso de cacheo o fallo (generalmente cuando desarrollamos).

Bueno, expliquemos cada una, en primer lugar apache no sabe que tu app es un MVC de ASP.Net, por lo que cuando hagamos un deploy o creemos un proyecto nuevo de Mono ASP.Net con MVC, lo primero a crear es un .htaccess forzando a que es un MVC. El código del htaccess es:

ForceType application/x-asp-net

Con esto ya  podemos poner a funcionar nuestra aplicación web. El siguiente paso para hacer las cosas bien, sería crear un index, ¿Por qué? ¿Acaso no saben cual es mi index? Pues no, todas las pruebas, tanto en Linux como en Mac OS X, es que mod_mono no es capaz de entender cual es el index que definimos en el global.asax, por lo que lo mejor es crear un index.aspx que cargue nuestro HomeController, o el que queramos. El index estaría en el raiz del proyecto y su código sería:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<%
   this.Context.RewritePath("Home", false);

   IHttpHandler httpHandler = new MvcHttpHandler();
   httpHandler.ProcessRequest(this.Context);
%>

Lo que hacemos con este index.aspx es decirle que cuando cargue la home (el index) cargue automáticamente el HomeController. Ahora solo nos falta crear un sistema de reseteo de backend por si se queda en cache y queremos cambiar algo. Para ello creamos una carpeta, por ejemplo, reset-mono-backend y creamos un .htaccess dentro de esa carpeta. Cabe decir que al htaccess lo podemos otorgar de un sistema de autentificación y cosas por el estilo para acceder, pero como esto es un ejemplo, será lo más básico. El contenido del .htaccess será:

ForceType None
SetHandler mono-ctrl

Al entrar en /nuestroproyecto/reset-mono-backend, nos aparecerá una interfaz que nos permitirá entre otras cosas, resetear el backend. Otro día explicaré como se instala el sistema en si.

Por que no usar django. Breve comparativa entre django, ruby y Mono ASP.Net con MVC

20 diciembre, 2011

Hace un tiempo empecé a oír hablar de django y empecé a interesarme por el. La verdad que al principio me llamaba mucho la atención porque la gente no hacia mas que alabar las virtudes de django. Investigando encontraba mas y mas alabanzas, incluso expertos que comparaban django con otros entornos como Mono ASP.Net con MVC o ruby.

A veces las comparaciones son odiosas y esto es que lo les pasa a los demás entornos cuando los comparamos con django. Al comparar django con Mono ASP.Net con MVC, comentaban como un mismo proyecto realizado por programadores expertos en django, realizaban muchas mas tareas que los expertos en ASP.Net en el mismo tiempo y que el resultado final del proyecto es que era mas rápido y consistente el desarrollo en django que en ASP.Net. Yo no digo que django sea un mal entorno, ni que los programadores de ASP.Net sean malos, pero la calidad de un programador de .Net realizando una web deja un poco que desear en la mayoría de los casos, no asi un programador friki de python que ha decidido hacer webs y que seguramente sea mucho mas versátil que uno de asp.net aunque hiciera la web en php y para mi esto no es comparable. Por otro lado comparaban django con ruby y no me gusto nada la comparación, ya que al comparar, decían que ruby on rails era para “nenas” y django para “hombre de pelo en pecho”. La verdad que esta comparación, es un poco ridícula, hasta llego a hacerme gracia a pesar de no gustarme.

Ahora vayamos a mi experiencia personal. Decidí instalarme django, ruby y Mono ASP.Net con MVC. Al buscar información, tutoriales o algo de guía para instalar e iniciar django, me encuentro con poca información y además centrada para linux, seguía las guías para mac y me costo sudor y lágrimas hacerlo correr (mi amigo @saikus no fue capaz). Cuando ya conseguí, intente hacer una prueba pero fui incapaz, bastante complicado para empezar sin un libro o sin que alguien te enseñe. Aun así, vi que utiliza una especie de servidor propio, por lo que para por ejemplo hacerlo correr en apache, hay que arrancarlo desde ssh y enlazarlo por un fastcgi o similar con apache, pero la cuestión es, cuanta comunidad puede generar algo que es muy muy muy dificil que sin ser pro y sin gastar un dineral en hosting, puedan hacer pruebas (yo en mi hosting no puedo instalarlo de momento).

Por ejemplo, mi experiencia con ruby o asp.net es muy mas satisfactoria, puesto que ruby es tan fácil como instalarlo desde algún apt-get, ports, descargable, etc y luego instalar las mil y una gemas necesarias. De una forma rápida y fácil puedes hacer funcionar un ejemplo o programar algo no solo en linux, sino en MacOSX, que es importante, ya que cada vez hay mas gente que usa este sistema. Por otro lado Mono ASP.Net con MVC es también muy fácil, quizás algo mas complejo que ruby, pero tan fácil como bajarse el instalable o en el peor de los casos las fuentes de la web de mono y compilar. Mono ya tiene XSP que es su propio server como ocurre con django y rails, y con mod_mono lo compilamos e instalamos en un periquete en apache.

Por que me gusta mas usar Mono ASP.Net con MVC que usar ruby o django. Django lo descarto por el costo de su instalación, porque no tengo un buen IDE donde poder programarlo y si quisiera pagar aunque fuera poco por los IDES, ¿Por qué no volverme a Windows y usar Visual Studio? Ruby es un poco parecido, es mas fácil de instalar y trabajar, pero falta un buen IDE, Netbeans tiene soporte, al igual que Eclipse para django, pero son plugins para mi gusto no estan muy muy depurados. Por el lado de Mono ASP.Net con MVC tenemos la opción de monodevelop, que si bien es cierto que sus primeras versiones eran como los plugins antes mencionados, las ultimas han mejorado sustancialmente y no hay que olvidar que en lugar de ser un IDE de java con plugins para python o ruby, es un IDE de .Net (dotnet), por lo que mvc esta soportado nativamente.

En conclusión, a django le veo demasiadas pegas que ensombrecen las virtudes que tiene. Ruby es quizás el mas equilibrado en cuanto a potencia y tiempo de desarrollo y Mono ASP.Net con MVC es mas lento en cuanto a desarrollo pero muy potente, además de no ser un framework añadido a un lenguaje (mvc si, pero no asp) sino todo un entorno preparado para la web, donde con un par de clicks es muy fácil generar clientes de servicios web, o crear un servicio web xml, una pagina web o mil cosas mas. Es por esto que yo personalmente me quedo con Mono ASP.Net con MVC.