En primer lugar, muy buenas preguntas.
No tengo experiencia en web con ASP.Net MVC, pero tengo experiencia con los formularios web ASP.Net y la migración de una aplicación comercial ASP.Net de Windows a Mono que se ejecuta en Linux.
Puedo responder algunas de sus preguntas.
1) ¿Es probable que obtenga más errores y errores en lugar de simplemente seguir con una implementación de Windows? Y si es así, ¿qué tan malos son algunos de los errores, has tenido proyectos en los que no funciona en absoluto?
Yo diría que sí pero no muchos. Nuestra aplicación tiene más de 200.000 líneas de código y actualmente solo puedo pensar en un error Mono que existe con nuestro código, que es menor. El error está llamando al método Session.Abandon que bloquea Apache. Creo que encontrarás más errores en las nuevas .Net API, pero en general el framework es muy estable.
2) ¿Recomienda programar en Visual Studio y luego implementarlo en una plataforma mono? ¿O hay un IDE mejor que recomiendas, como Mono (o Eclipse si es posible)? Actualmente utilizo Linux como mi sistema operativo y ejecuto Windows 7 con Visual Studio.
Creo que no hay mejor IDE que Visual Studio en términos de las características/estabilidad que ofrece. Sin embargo, al decir esto MonoDevelop es un IDE muy bueno que es muy similar a Visual Studio. Simplemente carece de muchas de las características adicionales que ofrece Visual Studio. Por ejemplo, un Diseñador visual para páginas web y adjuntarlo a la depuración de procesos. En la empresa para la que trabajo usamos MonoDevelop en Windows/Mac y Linux. Entonces, si está buscando una solución multiplataforma, entonces vaya con MonoDevelop, pero si no le importa usar Windows como su PC de desarrollo y pagar licencias VS, entonces VS está bien.
Editar: Al momento de redactar Visual Studio Community Edition ha sido liberado y no requiere licencia. También existe la posibilidad de utilizar .NET Core junto con su editor favorito (o Visual Studio Code, también gratis). Este último es compatible con Windows, Linux y Mac OS X). También ahora es Visual Studio for Mac.
3) Como ya he varias aplicaciones que se realizan utilizando .NET 4.5 beta y beta mvc4, éstos son compatibles con la versión actual del Mono? Si no, ¿cuáles son los marcos de tiempo promedio desde cuando se lanza oficialmente un marco hasta que Mono se vuelve compatible?
No sé si estas API todavía son compatibles. Una forma de averiguarlo es utilizando la herramienta Moma para analizar sus ensamblajes. La otra opción sería descargar la última versión de Mono + MonoDevelop e intentar construir su solución usándola. No sé de un marco de tiempo exacto para el lanzamiento de las API, pero creo que, en general, es muy poco después del lanzamiento de .Net y, a veces, incluso antes de que se publique Microsoft.
4) No conozco las bases de datos. Mis bases de datos son para SQL Server, tendría que cambiarlas para ejecutarlas en un servidor Linux. ¿Es esto un dolor o un error propenso? Mis bases de datos de servidor sql se crean usando código de entidad primero, ¿funciona esto si tengo que crear bases de datos MySQL (o lo que sea)?
-> la respuesta debería ser no. MS lanzó el Servidor MS-SQL para Linux. puede descargar MSSQL en ubuntu en cuestión de 2 comandos apt-get. No sé cómo editar esta parte de la respuesta. < - Sí, es una base de datos de cambio de dolor. Incluso más de un dolor si está utilizando procedimientos almacenados. Existen programas comerciales que pueden convertir sus tablas de bases de datos y datos de MS SQL Server a MySQL o Postgresql. Usamos las herramientas de DBConvert para convertir nuestro esquema de base de datos a Postgresql. Convertir las tablas fue la parte fácil. Lo más difícil fue convertir nuestros procedimientos almacenados. Nuestra aplicación depende en gran medida de los procedimientos almacenados con más de 900 procedimientos almacenados en nuestra base de datos. Tuve que reescribir todos los procedimientos almacenados en Postgresql a mano. Si los procedimientos almacenados son solo SQL directo, entonces no será tan difícil, pero si depende en gran medida de TSQL, necesitará encontrar equivalentes a su código en el lenguaje de codificación utilizado por la base de datos que elija. Con Postgresql, el mejor equivalente es PL/pgSQL. No he tenido experiencia con la migración de datos utilizando las herramientas comerciales que DBConvert ofrece. Hicimos muchos cambios en nuestra base de datos al mismo tiempo que migramos a Mono, por lo que para la migración de datos escribimos nuestro propio código para realizar la migración.
5) Actualmente despliego mis sitios web de mvc a un servidor remoto Server 2008r2. ¿Hay alguna alternativa a IIS que usarías para Linux? ¿Puede proporcionarme un enlace a un tutorial sobre cómo configurarlo?
& &
7) ¿Me puede dar una estimación del espacio de disco hasta qué punto el mono + algún tipo de marco IIS + etc. que esta tomaría? En una comparación de un sistema operativo Linux con un sistema operativo Windows, Windows ocupa un TON más de espacio; ¿también usaría esta TON de espacio de disco? (Entiendo la comparación de tamaño del sistema operativo no es un buen ejemplo.)
Apache2 con mod_mono se utiliza para alojar sitios web con Mono en Linux. Linux usa un espacio mínimo. Estamos alojando nuestra aplicación web con Amazon EC2. Una nueva instalación de nuestra pila que incluye básicamente Ubuntu, Mono, Apache2, Postgresql y Postfix solo ocupa 1.2 GB de espacio. Entonces, la respuesta es No Mono no ocupa una gran cantidad de espacio en el disco. Here es un tutorial sobre la configuración de Mono en Ubuntu. No conozco ningún tutorial que sea excepcionalmente bueno. Si necesita ayuda, los mejores lugares para ir son Mono IRC channel y Mono mailing lists. Aquí puede hablar con la comunidad y los desarrolladores que trabajan en el Xamarin.
8) ¿Hay algún inconveniente que pueda haber pasado por alto, que pueda pensar? Al igual que hay algún problema extraño con la exploración de directorios, archivo de configuración hirearchy, problemas de jquery/ajax, etc.
La sensibilidad de mayúsculas/minúsculas podría ser un problema. Linux es un SO sensible a las mayúsculas y minúsculas, por lo que debe asegurarse de que todas las llamadas al sistema de archivos distingan entre mayúsculas y minúsculas. Dependiendo de la base de datos que elija también podría ser sensible a mayúsculas y minúsculas. Postgresql es una base de datos sensible a mayúsculas y minúsculas, por lo que al ejecutar consultas, los nombres de las columnas deben ser sensibles a mayúsculas y minúsculas. Con las URL MVC no distingue entre mayúsculas y minúsculas, por lo que debería estar bien con eso. Los sitios web de ASP.Net distinguen entre mayúsculas y minúsculas, ya que los nombres de las páginas utilizan las URL. Si tiene problemas de sensibilidad de mayúsculas y minúsculas al ejecutar por primera vez sus aplicaciones en Mono con Linux, puede usar Mono IOMap para ponerlo en funcionamiento. IOMap se ocupa de la insensibilidad de las mayúsculas y minúsculas pero le da a su aplicación un impacto en el rendimiento, por lo que no se recomienda su uso en un entorno de producción.
9) ¿Tiene alguna recomendación, tutorial, blog, etc.? ¿Hay algún sitio de Stack Exchange que trate este tipo de problemas mejor que este? (No pude encontrar uno, aparte de tal vez el de Linux.
No puedo pensar en sitios web mejores para la programación y administración del servidor que no sean stackoverflow y serverfault.
10) Aunque no es una necesidad para mí hacer esto, me gustaría configurarlo y hacerlo solo para tener la opción en el futuro, pero no voy a perder el tiempo si es un desperdicio completo. Tengo un VPS de Linux y un VPS de Windows que alquilo ahora mismo, así que si lo hiciera, también me permitiría tener solo un servidor remoto Linux (posiblemente con menos espacio en el disco duro y ram), así que potencialmente podría ahorrarme dinero. Entonces mi última pregunta es, ¿recomendarías hacer esto si tu situación fuera similar a la mía?
Lo recomendaría, pero debe tener en cuenta que hay una gran curva de aprendizaje para familiarizarse con los sistemas operativos Linux, diferentes servidores de bases de datos y aplicaciones de instalación/configuración para ejecutar en el marco Mono. Probablemente descubrirá que muchas cosas no son tan intuitivas como lo son con las tecnologías de MS. No utilizará una implementación de GUI y configurará sus aplicaciones en el servidor ya que SSH es la mejor manera de interactuar con servidores Linux.
Te aconsejo que te dividas y hagas 1/2 pregunta por vez, ¡eso te dará la mejor respuesta! Además, consulte http://serverfault.com/ para obtener una mejor respuesta a algunas de sus preguntas. – VinayC