miércoles, abril 04, 2007

Asp.net usando MySQL en Linux con Mono

Una vez que esta instalado mono y ya esta funcionando asp.net en linux, conforme al post Mono en un VDS de Godaddy.

Vamos a realizar un par de modificaciones al ejemplo de base de datos que viene por omision en la carpeta de pruebas (test), para que se pueda accesar a MySQL con los archivos dbpage1.aspx, dbpage2.aspx:

Resulta que los ejemplos que trae esta instalacion de mono es con un servidor PostgreSQL, asi que para nuestro caso que usamos MySQL tenemos que cambiar los archivos de configuracion de la aplicacion, en particular el web.config: 

<appSettings>
.
.
.
<add key="DBProviderAssembly"
value="ByteFX.Data"/>
<add key="DBConnectionType"
value="ByteFX.Data.MySqlClient.MySqlConnection"/>
<add key="DBConnectionString"
value="server=127.0.0.1;user id=xxxx;password=xxxxx;database=xxxxx"/>
.
.
.
</appSettings>

Con lo anterior le decimos a nuestra aplicacion que use el conector ByteFX para hacer uso de MySQL. Este provider ya viene de forma estandar en la instalacion de mono.

Creamos nuestra base de datos en MySQL con:

CREATE TABLE `test` (
`person` text character set utf8 collate utf8_spanish_ci NOT NULL,
`email` text character set utf8 collate utf8_spanish_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `customers` (
`id` INT( 8 ) NOT NULL ,
`name` VARCHAR( 256 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
`address` VARCHAR( 256 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM ;

 Una vez creadas las tablas en MySQL ejecutamos los archivos:

dbpage1.aspx

dbpage2.aspx

Listo!

Mono en un VDS de Godaddy

Tenemos un desarrollo listo en asp.net y nos topamos con la necesidad de ponerlo en Linux. La respuesta es usar mono en apache, y dado que ya contamos con un servidor en internet con Fedora 4 decidimos instalarlo.

Pero resulta que el Virtual Dedicated Server (VDS) de GoDaddy no trae por omisión la instalación de mono, asi que seguimos las instrucciones de go-mono.com para instalarlo.

Lo primero es obtener 3 archivos zip desde http://www.mono-project.com/Downloads:

  1. mono.zip
  2. xsp (para obtener la carpeta test xsp-1.2.3-0.novell.noarch.rpm)
  3. mod_mono (un rpm: mod_mono-1.2.1-0.fedora4.novell.i386.rpm)

Es lo unico que se requiere para ejecutar un desarrollo asp.net 1.1. Para desarrollos de asp.net 2.0 (digamos construidos con Visual Web Developer) es recomendable esperar a la version mono 2.0. En nuestro caso es un desarrollo sencillo que no utiliza muchos objetos nuevos de net 2.0, asi que no hubo problema.

Lo siguiente es descomprimir

$ unzip mono-all.zip

Instalar mono con Root (debe incluirse los archivos de xsp y mod_mono) :

$ rpm -Uvh *rpm

Con lo anterior ya tenemos instalado mono, ahora tenemos que configurar el servidor apache, para esto cambiamos de directorio a /etc/httpd/conf/. Aun cuando se ha instalado xsp que en si es un servidor, no lo usaremos, como mencionamos solo queremos la carpeta test que se instala.

Tenemos que editar el archivo httpd.conf agregando una linea, de preferencia despues de:

#
# Load config files from the config
# directory  "/etc/httpd/conf.d".
#
Include conf.d/*.conf
Include /etc/httpd/conf.d/mod_mono.conf

Guardamos el archivo anterior y verificamos que mod_mono.conf efectivamente se encuentre dentro de la carpeta conf.d, de lo contrario creamos un nuevo archivo y agregamos lo siguiente:

# mod_mono.conf

# Acthung! This file may be overwritten
# Use 'include mod_mono.conf' from other configuration file
# to load mod_mono module.

<IfModule !mod_mono.c>
LoadModule mono_module /usr/lib/httpd/modules/mod_mono.so
AddType application/x-asp-net .aspx
AddType application/x-asp-net .asmx
AddType application/x-asp-net .ashx
AddType application/x-asp-net .asax
AddType application/x-asp-net .ascx
AddType application/x-asp-net .soap
AddType application/x-asp-net .rem
AddType application/x-asp-net .axd
AddType application/x-asp-net .cs
AddType application/x-asp-net .config
AddType application/x-asp-net .Config
AddType application/x-asp-net .dll
DirectoryIndex index.aspx
DirectoryIndex Default.aspx
DirectoryIndex default.aspx

Por ultimo debemos comprobar que el modulo se encuentre en la direccion que pusimos en el archivo conf.

/usr/lib/httpd/modules/mod_mono.so

En caso de no ser asi podemos buscar el archivo con

% find / -name mod_mono.so -print

Modificamos la ruta o en su caso copiamos el archivo.

Si queremos comprobar que esta funcionando mono en nuestro servidor apache copiamos la carpeta de test de mono a la carpeta de los documentos html que usamos normalmente:

cp /usr/lib/xsp/test /home/miusuario/public_html/

Listo!