Usar Capistrano con DreamHost

Estaba teniendo problemas con Capistrano 1.4 para hacerlo funcionar con Dreamhost y he tenido que actualizarlo a la nueva versión 2.0, que trae algunos cambios que me han desorientado al principio, más que nada porque en el manual mítico oficial no han actualizado nada. Luego descubrí que la nueva web oficial es otra, aunque apenas tiene documentación.

Los pasos que he seguido son:

Desde el panel de control de Dreamhost:

  1. Añadir un nuevo subdominio, como myapp.jesuscarrera.info, dándole soporte para FCGI, y añadiendo /current/public al directorio sugerido.

    Más tarde, en cuanto se propaguen las DNS y podamos acceder a http://myapp.jesuscarrera.info/current/public, y antes de ejecutar cap deploy, deberemos borrar manualmente estos dos directorios, porque cap deploy creará un symlink para que Capistrano y Subversion funcionen bien juntos.

  2. Añadimos la base de datos que vallamos a utilizar.
  3. Creamos el repositorio de Subversion. Yo tengo creado un subdominio para acceder a esos repositorios. Su URL quedaría así: http://svn.jesuscarrera.info/myapp

En nuestra aplicación (máquina local en desarrollo).

  1. Editar el config/database.yml para que en :production tenga los datos de Dreamhost.
  2. En config/environment.rb descomentar la línea:
  3. En public/dispatch.* cambiarle la primera línea por ésta:
  4. En public/.htaccess asegurarnos de que ésta línea tenga .fcgi y no .cgi
  5. Añadir después de RewriteEngine On lo siguiente, para que muestre una página de mantenimiento si existe (cuando ejecutamos cap deploy:web:disable).
  6. Instalar Capistrano 2.0
    sudo gem install capistrano
  7. Añadimos los archivos de Capistrano a nuestra app. Ejecutamos desde el directorio myapp:
    capify .

    Ésto crea dos archivos: Capfile y config/deploy.rb.

  8. Editamos config/deploy.rb para que quede algo así:

    A mi me ha funcionado sin estas últimas líneas, pero puede que en algunos casos sean necesarias:

    Recuerda que para que no pida las claves todo el rato podemos autorizar nuestro equipo para SSH.
  9. Realizamos nuestra primera importación al repositorio

    svn import myapp svn+ssh://[email protected]/home/jesuscarrera/svn/myapp -m "Initial import"

  10. Renombramos el original (o si eres valiente también lo puedes borrar), y nos descargamos la primera versión del repositorio:
    mv depot depot.imported
    svn co svn+ssh://[email protected]/home/jesuscarrera/svn/myapp myapp
  11. Preparamos el servidor para recibir nuestra app:
    cap deploy:setup
  12. Enviamos nuestra aplicación aplicando migraciones:
    cap deploy:cold
  13. A partir de ahora cada vez que realicemos cambios en nuestra máquina local en desarrollo deberemos en primer lugar enviarlos al repositorio, y luego actualizarla en producción:

    svn commit -m "Change description"
    cap deploy

    Si hemos añadido migraciones sería con:
    cap deploy:migrations

    Si algo va mal podemos volver a la anterior versión con:
    cap deploy:rollback

    Si vamos a realizar un mantenimiento importante podemos deshabilitar y habilitar la web con:
    cap deploy:web:disable
    cap deploy:web:enable

    Para ver otras tareas:
    cap -T

Yo lo he probado con la aplicación que te enseña a hacer el fantástico libro Agile Web Development With Rails. La podéis ver en depot.jesuscarrera.info/store. Ha funcionado tan bien y a la primera que hasta me ha sorprendido!

6 Comments

  • Hola!
    Tengo algunas dudas sobre el documento.
    Al principio dices que creemos un subdominio…si queremos hacerlo con http://www.midominio.com, qué tendriamos que cambiar?
    En el paso 2) a qué te refieres con añadir la BBDD que vamos a usar?
    Y en el tercero dices que creas el repositorio en un subdominio nuevo…creas el subdominio y ¿donde creas el repositorio exactamente y como?¿Por qué creas otro subdominio para ello?
    Perdona pero no tengo nada claro lo del capistrano y quiero usarlo.
    Saludos.

    By Leman
    | Monday, 15 October 2007
  • - Para hacerlo con un dominio los pasos serían los mismos, pero en vez de añadir un subdominio pues añades un dominio.

    - En el paso 2 me refiero a crear una nueva base de datos, que se hace desde el panel de control.

    - Y lo de crear el repositorio en un subdominio lo hago para tenerlo más ordenado, pero no es obligatorio. El repositorio también se crea desde el panel de control, en la pestaña de subversion.

    | Monday, 15 October 2007
  • ¡Hola!
    Gracias por las indicaciones. Ahora lo veo todo más claro. Sin embargo, aun tengo problemas. Ahora cuando hago el cap deploy:cold obtengo un RuntimeError. Debo tener algo mal en cuanto a la configuración. Buscando por Internet he visto que este tipo de error de Capistrano suele darse cuando hay problemas con lo de /current/public. Entonces he repasado tus indicaciones y tengo alguna duda:
    En el primer paso dices “añadiendo /current/public al directorio sugerido”. ¿Te refieres a añadirlo en el panel de dreamhost “Specify your web directory: /home/username/www.myapp.com/current/public” y crearlo también en el directorio /home/username/www.myapp.com/current/public” ó sólo alguna de las dos cosas? y mi segunda duda…dices que hay que borrarlo antes de hacer cap deploy…¿antes de hacer cap deploy:setup también hay que borrarlo?¿cuando exactamente?
    ¡Saludos y gracias por la ayuda!

    By Leman
    | Tuesday, 16 October 2007
  • Sí, me refiero a eso: Specify your web directory: /home/username/www.myapp.com/current/public. Luego cuando se propaguen las DNS deberás borrar manualmente esos directorios, por ej. por FTP. Luego podrás ejecutar cap deploy:setup, cap deploy:cold o cap deploy.

    | Wednesday, 17 October 2007
  • Hola, yo tengo un servidor propio al que tengo acceso por consola, y otro servidor que me da un svn repositorio. Ahora mismo tengo un pl que se trae los ficheros del svn y los copia en l ruta que yo le de. (este fichero me lo han dado, el pl). Mi problema es que los ficheros no me permite sobreescribirlos cuando ejecuto el script.

    En el codigo del pl no veo nada relacionado, no entiendo bien si el pl es un fichero que ejecuta el capistrano, en este caso no veo el comando para ello. Como es esto?

    muchas gracias

    | Tuesday, 13 January 2009
  • Con capistrano no necesitas ningun pl para pasar los ficheros del svn al servidor

    | Tuesday, 13 January 2009

Leave a comment