2010-04-13 7 views
37

Tengo una aplicación de rieles que necesito implementar en 3 servidores: machine1.com, machine2.com y machine3.com. Quiero poder implementarlo en todas las máquinas a la vez y en cada máquina individualmente. ¿Alguien puede ayudarme con un archivo de configuración/receta esquemático de Capistrano? ¿Debería estar todo en deploy.rb o debería dividirlo en machine1.rb, etc.?Implementación de una aplicación Rails en varios servidores mediante Capistrano - Mejores prácticas

Pensé que estaba en el camino correcto para que Capistrano aceptara los argumentos de la línea de comandos, pero se bloqueó cuando intenté establecer los roles dentro de los espacios de nombres. Pasaría 'hosts = 1,2,3' como argumento y establecería el rol: app/web/db en "machine # {host} .com" después de dividir el comando y entrar en cada host do | | {} ...

De todos modos, aparte de crear 4 diferentes archivos deploy.rb y cambiarle el nombre antes de ejecutar el límite: implementar cada vez, estoy perplejo. Me gustaría ser capaz de hacer lo siguiente:

cap deploy:machine1:latest_version_from_svn 
cap deploy:all_machines:latest:version_from_svn 

Simplemente no sé si todo debe estar en deploy.rb separé de espacios de nombres o si debe ser dividida en múltiples * ** despliego. rb archivos.

Respuesta

67

Todo debe ir en un solo archivo. Aquí hay un ejemplo:

set :application, "my-app" 
set :repository, "[email protected]:my-app.git" 
set :keep_releases, 5 
set :deploy_via, :remote_cache 
set :git_enable_submodules, true 
set :scm, :git 
set :user, 'your-user-here' 

set :deploy_to, "/var/www/staging.mydomain.com" 
set :branch, 'staging' 
set :rails_env, 'staging' 

role :web, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com" 
role :app, "machine1.mydomain.com", "machine2.mydomain.com", "machine3.mydomain.com" 
role :db, "db.mydomain.com" 
# ... 

Verá que solo se especificó un servidor db. Esta es la máquina desde la cual se ejecutarán las migraciones. Si solo tiene una base de datos (99.9% de posibilidades de que la respuesta a esa pregunta sea SÍ), asegúrese de proporcionar solo una.

+1

Muy útil, gracias;] – jkndrkn

+3

hey @Louise, ¿tiene esto en cuenta como la respuesta predeterminada? – jackyalcine

+1

¿Cómo implementaría solo machine1.mydomain.com (como se indica en la pregunta) –

2

Tuve que usar una sintaxis ligeramente diferente.

role :app, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer' 
role :web, %w{s01.foobaz.com s02.foobaz.com}, user: 'deployer' 
Cuestiones relacionadas