Remover el index.php de las rutas de CodeIgniter

Para hacer esto se hace uso de las capacidades de sobreescritura de URLs de Apache.  Se debe agregar un archivo .htaccess en la raíz del sitio web con el siguiente contenido.

RewriteEngine on
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

En servidores de Dreamhost he tenido un mejor éxito utilizando la siguiente versión.

RewriteEngine on
RewriteCond $1 !^(index.php|public|user_guide|media|robots.txt)
RewriteRule ^(.*)$ index.php?/$1 [L]

Adicionalmente es necesario indicarle a CodeIgniter que ya no agregue artificialmente el archivo index.php a los URL de la siguiente manera.  Edite el archivo config/config.php y modifique la siguiente llave.

$config['index_page'] = "index.php";

De forma que quede de la siguiente manera.

$config['index_page'] = "";

Enlaces.

Moviendo a mi blog de subdominio

Por ninguna razón aparente, hoy cambié mi blog de dominio.  Hasta esta mañana era http://jorgeivanmeza.com/blog/, ahora es http://blog.jorgeivanmeza.com/.

El procedimiento no fue interesante, simplemente creé el nuevo subdominio y copié los archivos con un cp -rf, sin embargo si me interesa documentar el pequeño cambio que tuve que hacer para conservar la ruta anterior y no romper enlaces antiguos al sitio, especialmente el del RSS.

Es necesario indicarle a Apache que la ubicación antigua ha sido movida a la nueva ubicación.  Para esto agregué la siguiente instrucción al archivo .htaccess ubicado en el directorio raíz correspondiente con el URL http://jorgeivanmeza.com/.

redirect 301 /blog/ http://blog.jorgeivanmeza.com/

El formato de la instrucción redirect es el siguiente.

  • Movido permanentemente: 301.
  • Ubicación antigua: /blog/.
  • Nueva ubicación: http://blog.jorgeivanmeza.com/.

Gracias a esto mis feeds se pueden consultar tanto desde el nuevo sitio: http://blog.jorgeivanmeza.com/feed/ como desde el anterior: http://jorgeivanmeza.com/blog/feed/.

Enlaces.

Transfiriendo un proyecto a Dreamhost

Introducción.

Este mes realice la transferencia de un proyecto que estaba albergado en un hosting un tanto incómodo (poco espacio, no acceso al shell, bases de datos limitadas, no acceso por SFTP, …) hacia Dreamhost donde están hospedados los demás proyectos.  Este proceso incluyó la transferencia del dominio desde el Registrar anterior, la copia de archivos y la copia de las bases de datos.  Pensé que la parte de actualización de los dominios iba a ser mas tortuosa pero en realidad no fue nada difícil, sin embargo amerita su documentación para futuras referencias.

Transferencia del dominio.

Para transferir el dominio al Registrar de Dreamhost se debe contar con las siguientes condiciones obligatorias.

  • Ser un dominio .com, .net, .org o .info.
  • Tener una cuenta (Web ID) con Dreamhost.
  • El dominio a transferirse debe tener mas de 60 dias de adquirido/renovado.
  • Tampoco debe estar a punto de vencerse ya que el proceso toma algunos días y es abortado si este se vence durante la transacción.  Un rango de tiempo mínimo es de 2 semanas antes de su vencimiento.
  • No debe estar asegurado (locked) o retenido (on-hold) por el Registrar actual.
  • Se debe contar con el código de transferencia del dominio provisto por el Registrar.
  • Se debe contar con acceso a la cuenta de correo del administrador del dominio registrada con él ya que a esta se envía un correo de confirmación.

Para iniciar la transferencia se accede al panel de control de Dreamhost (http://panel.dreamhost.com/) a través de los menúes Domains > Reg. Transfer.  En el campo Transfer a registration to us se debe especificar el nombre del dominio que va a ser trasladado.  Posteriormente el sistema solicita el código de transferencia (Transfer Auth Code) que lo entrega el Registrar de orígen y la información del Whois que puede ser la de Dreamhost si se desea privacidad o sus datos propios.

En este momento se envía un correo de confirmación a quien aparezca como administrador del dominio, este correo contiene una autorización que debe ser activada en un plazo máximo de 7 días o la transacción se terminará automáticamente.  Esta información se puede consultar a través de Whois.  Este proceso puede tomar algunos días.

Para formalizar la transferencia del dominio es obligatorio que se renueve el dominio por un año mas.  Este tiempo se suma al que tenga ya contratado el dominio en ese momento.

Después de realizada la transferencia del registro se especifican los servidores DNS (Whois nameservers) que manejaran el nombre, ya sean los del hosting orígen si se desea que se siga utilizando (útil si no se ha hecho aún la copia de archivos) o a los siguientes servidores de Dreamhost para que se utilicen los archivos almacenados allí.

  • ns1.dreamhost.com
  • ns2.dreamhost.com
  • ns3.dreamhost.com

Para verificar el cambio del dominio utilice un navegador web o la herramienta ping junto con el nombre del dominio en cuestión.  En éxito deberá aparecer el nuevo sitio o la nueva dirección IP respectivamente, a la cual apunta el dominio.

Si utiliza Windows Vista como sistema operativo, probablemente necesite renovar el caché del DNS ya que este habrá almacenado el valor inicial y se demorará cierto tiempo en solicitar el nuevo, impidiéndo que sea tomado en cuenta el cambio en el DNS ya propagado.  Para hacer esto realice los siguientes pasos.

  1. Haga click sobre el menú de inicio desplegándolo.
  2. En el campo de texto ubicado en la parte inferior donde dice “Iniciar la búsqueda” escriba cmd.
  3. Presione las teclas CTRL + SHIFT + ENTER.
  4. Presione el botón Continuar para aceptar la ejecución del Símbolo del sistema con permisos de administrador.
  5. Ejecute el comando: ipconfig /flushdns

Copia de seguridad de la base de datos.

Mientras se realiza la transferencia del registro es necesario continuar con el proceso de la copia de seguridad de la base de datos.  Como mencioné, el hosting orígen no me daba acceso a la línea de comando así que no podía utilizar mysqldump así que la copia de seguridad se realiza a través de PHPMyAdmin.  El procedimiento es muy sencillo.

  1. Ingrese al PHPMyAdmin del servicio de hosting con el nombre de usuario y contraseña de la base de datos que se va a exportar.
  2. En la parte izquierda seleccione la base de datos que se va a exportar (es posible que aparezcan varias).
  3. En la parte media superior elija la etiqueta Exportar.
  4. Seleccione las tablas (por defecto todas) que desea exportar y el formato (por defecto SQL).
  5. Elija la casilla Deshabilitar la revisión de las llaves extranjeras para evitar futuros problemas con la restauración de las tablas en desórden.
  6. Seleccione las casillas Estructura y Datos para que sean incluídos en la copia de seguridad.
  7. En la parte inferior seleccione Enviar (genera un archivo descargable) y presione el botón Continuar.
  8. Almacene este archivo para posteriormente trasladarlo al nuevo hosting.

Creación de la base de datos y restauración de la copia de seguridad.

El primer paso es crear la nueva base de datos en la cuenta de Dreamhost, para esto realice los siguientes pasos.

  1. Acceda al Panel de Dreamhost.
  2. Navegue a través de los menúes Goodies > Manage MySQL.
  3. Ubique la sección Create a New MySQL Database.
  4. Ingrese la información de la nueva base de datos.
  5. Presione el botón Add new database now!.
  6. Tome atenta nota de la información suministrada en este punto.

El segundo paso corresponde a la restauración de la copia de seguridad realizada anteriormente.  Para hacerlo siga los pasos dispuestos a continuación.

  1. Acceda al PHPMyAdmin asociado a la cuenta.  Esto se hace accediendo al host (corresponde al valor del campo Use Hostname del paso anterior) de la base de datos desde un navegador web.
  2. Ingrese utilizando el nombre de usuario y contraseña especificados durante el paso anterior.
  3. Seleccione en la parte media superior la etiqueta Importar.
  4. En la sección Archivo a importar presione el botón Examinar y seleccione el archivo donde almacenó la copia de seguridad de la base de datos.
  5. Presione el botón Continuar para terminar el proceso.

Copia de los archivos al nuevo hosting.

Para este momento la transferencia del dominio ya ha sido realizada y la base de datos se encuentra lista, el problema es que el sitio aún está vacío.  El único acceso al hosting de orígen es a través de FTP motivo por el cual se siguen estos pasos para realizar la copia de lo archivos del proyecto.

  1. Inicie una sesión SSH con su cuenta de Dreamhost.  Para esto utilice un cliente SSH como Putty (Windows).
    • Como Host name escriba su nombre de dominio, el cual ya debe ser accesible desde su ubicación.
    • Como Connection type elija SSH.
    • Presione el botón Open.
  2. En los campos Login as y Password ingrese los datos correspondientes al usuario propietario de la cuenta asociada al dominio, que de paso, es diferente al usuario administrador de su cuenta de Dreamhost.
  3. Acceda al directorio donde se almacenarán los archivos de su sitio web.  Dreamhost crea en las cuentas de los usuarios, un directorio por cada dominio asociado.  Estos directorios tienen como nombre el mismo nombre del dominio.

    $ cd midomino.com

  4. Utilice wget para realizar la copia de los archivos del hosting original hacia la cuenta en Dreamhost.

    $ wget –mirror ftp://USUARIO:CONTRASEÑA@HOSTING_ORIGEN/RUTA

    Modifique los valores de USUARIO (usuario FTP del hosting orígen), CONTRASEÑA (contraseña del usuario FTP del hosting orígen), HOSTING_ORÍGEN (nombre o dirección IP) y RUTA (ubicación de los archivos a copiar).

Ajustes finales.

Realice los ajustes finales que requiera su proyecto como configurar la nueva ubicación y autenticación de las bases de datos, asegurarse que los enlaces funcionen correctamente, etc.

Enlaces.

Actualización de Redmine a 0.7.3

Los pasos descritos a continuación fueron seguidos para realizar la actualización del administrador de proyectos basado en Redmine de su versión 0.6.4 a la versión 0.7.3.

Se descomprimió el paquete con la distribución original.

$ tar zxvf redmine-0.7.3.tar.gz

Se renombró el directorio por especificaciones propias.

$ mv redmine-0.7.3 sistemas_redmine-0.7.3

Se copió la información de conexión a la base de datos.

$ cp sistemas_redmine-0.6.4/config/database.yml sistemas_redmine-0.7.3/config

Se editó la información del servidor SMTP.

$ vi sistemas_redmine-0.7.3/config/environment.rb
            # SMTP server configuration
            config.action_mailer.smtp_settings = {
                :address => "127.0.0.1",
                :port => 25,
                :domain => "dominio.com",
                :authentication => :login,
                :user_name => "sistemas@dominio.com",
                :password => "redmine",
        }

Se realizó la actualización de la base de datos.  En este punto se recomienda realizar antes una copia de seguridad de la base de datos actual en caso de que algo falle en el proceso de actualización.

$ cd sistemas_redmine-0.7.3

$ rake db:migrate RAILS_ENV="production"

Se restauran los archivos que hayan sido subidos al sistema.

$ cd ..

$ cp -rf sistemas_redmine-0.6.4/files/* sistemas_redmine-0.7.3/files

En mi caso, el directorio de RedMine (sistemas_redmine-0.7.3) se encuentra ubicado por fuera del árbol público, sólo debería publicarse el directorio /public, para esto creo un enlace.

$ cd /home/usuario/public_html

$ ln -s /home/usuario/sistemas_redmine-0.7.3/public/ redmine

Creo el nuevo despachador con FCGI.

$ cd redmine

$ cp dispatch.fcgi.example dispatch.fcgi

$ chmod 755 dispatch.fcgi

Como sugerencia final se debe restaurar o adaptar el archivo .htaccess ubicado en redmine/public, de lo contrario se presentarán problemas con la carga de archivos CSS y JS.

Para mi caso particular, este es el archivo que he utilizado con las versiones mencionadas: .htaccess