El estándar de facto actual para hacer deployments de aplicaciones basadas en RubyOnRails es utilizar switchtower.

Switchtower sigue (al igual que RubyOnRails) el patrón DRY (don't repeat yourself), por lo tanto hace una serie de consideraciones sobre donde y como se hará el deployment, sin embargo muchas de estas consideraciones pueden ser cambiadas.

Una vez que configuré el repositorio subversion en mi host compartido, me puse a configurar switchtower para hacer los deployment hacia mi host compartido.

Switchtower se configura en el archivo /config/deploy.rb, asignándole valor a varias variables, en particular existe la variable :repository, la cual contiene la localización del repositorio (en mi caso subversion) que almacena el código de mi aplicación. Switchtower usa esta variable para acceder al repositorio subversion tanto desde la máquina de desarrollo desde la cual se corre el deployment, como desde el host hacia el cual se quiere hacer el deployment (para hacer el checkout en cuestion de los fuentes).

El acceso a mi repositorio subversion desde mi ambiente de desarrollo es vía svn+ssh://, por ejemplo:

svn+ssh://[mi usuario]@[mi dominio]/home/[mi usuario]/repo/[mi aplicacion]/trunk/

Pero (en mi caso en particular) mi proveedor de hosting no soporta (o al menos no de manera directa) que desde el servidor pueda acceder al repositorio subversion localizado en el mismo servidor vía svn+ssh://, es decir que no puedo usar el mismo url que uso desde mi máquina de desarrollo para acceder al repositorio subversion desde el hosting. El url para accederlo sería del tipo:

file:///home/rubycorn/repo/rubycorner/trunk

Por lo tanto tuve que modificar switchtower para tratar con esta situación, para ello modifiqué el /config/deploy.rb creando una nueva variable :repository_from_dev la cual será usada por switchtower para acceder al repositorio subversion desde mi máquina de desarrollo, mientras que la variable repository será usada para acceder al repositorio subversion desde el host al que se quiere hacer deployment. El extracto en cuestion del /config/deploy.rb quedó de esta forma:

RUBY:
  1. set :application, "mi aplicacion"
  2. set :repository, "file:///home/[mi usuario]/repo/[mi aplicacion]/trunk"
  3. set :repository_from_dev, "svn+ssh://[mi usuario]@[mi dominio]/home/[mi usuario]/repo/[mi aplicacion]/trunk/"

Luego altero el comportamiento de switchtower, agregándole al archivo /lib/tasks/switchtower.rake las siguientes líneas:

RUBY:
  1. # =======================================================
  2. # Extension para hacer deploy a mi hosting
  3. # =======================================================
  4. require 'switchtower/scm/subversion'
  5.  
  6. module SwitchTower
  7. module SCM
  8. class Subversion
  9. def latest_revision
  10. configuration.logger.debug "querying latest revision..." unless @latest_revision
  11. #repo = configuration.repository
  12. repo = configuration.repository_from_dev
  13. puts "usando repository_from_dev: #{repo}"
  14. until @latest_revision
  15. match = svn_log(repo).scan(/r(\d+)/).first
  16. @latest_revision = match ? match.first : nil
  17. if @latest_revision.nil?
  18. # if a revision number was not reported, move up a level in the path
  19. # and try again.
  20. repo = File.dirname(repo)
  21. end
  22. end
  23. @latest_revision
  24. end
  25. end
  26. end
  27. end

Con esto el rake deploy funcionó perfecto. Ya probaré los otros tasks de switchtower a ver que tal.


0 Respuestas a “Usando switchtower en un hosting “compartido””

  1. Ningún Comentario

Añade un Comentario





RSS feeds

Suscríbete a nuestros RSS Feeds