2012-09-10 15 views
10

Por alguna razón, Capistrano falla en casi todas las operaciones, porque parece pensar que mi current_path debe estar en /u/apps/. Establecí todas las variables que (AFAIK) deberían establecerse y eliminé todas las demás rutas predeterminadas similares, pero esta persiste.¿Por qué Capistrano usa/u/apps/en la ruta_actual, aunque he configurado: deploy_to

Éstos son los valores devueltos por las variables relevantes:

current_dir: current 
releases_path: /var/www/vhosts/dev.www.example.com/html/releases 
shared_path: /var/www/vhosts/dev.www.example.com/html/shared 
current_path: /u/apps/www.example.com/current 

Soy la creación :deploy_to, por lo que no current_path debería calcularse sobre la base de que !?

set :deploy_to, "/var/www/vhosts/dev.www.example.com/" 
+2

Otra posible causa de esto es si el actual_path se lee antes de deploy_to. Por ejemplo, tenía un conjunto: sidekiq_pid, "# {current_path} /tmp/pids/sidekiq.pid" que se invoca antes de deploy_to que estaba en un archivo production.rb, lo que causaba que fuera/u/apps de manera predeterminada. – JohnMerlino

+0

El comentario anterior de @JohnMerlino fue la respuesta para mí. La solución más fácil, el "error" más fácil de hacer en su código. La afeitadora de Occam dice que esta es la respuesta :-) – LpLrich

Respuesta

6

El tipo de solución es sólo para kludgey manualmente

set :current_path, "" 

El better solution, which can be found explained in this e-mail thread by Jamis Buck himself, es el uso de la evaluación perezosa cuando se establece otra variable que depende de current_path. En mi caso, tuve un algo escenario como este

set :some_path_var, "#{current_path}/some/path/" 

que tenía que cambiar a algo como esto:

set(:some_path_var) { "#{current_path}/some/path/" } 

pasando un bloque, el: No se ha evaluado inmediatamente some_path_var, y no forzó current_path para ser evaluado basado en un valor predeterminado para :deploy_to

2

Así que tuve este problema también y encontré que esta era la mejor solución.

Agregue esto a su config/deploy.rb

desc "Make sure the symlink will be from the right directory" 
    task :change_correct_dir, roles: :web do 
    set :current_path, File.join(deploy_to, current_dir) 
    end 
    before "deploy:create_symlink", "deploy:change_correct_dir" 

me ocurrió la idea de mirar a la fuente de la gema Capistrano y encontrar

_cset(:current_path) { File.join(deploy_to, current_dir) en

lib/capistrano/recipes/deploy.rb

1

Esto también puede suceder si no especifica una tarea en su comando de tapa.

cap deploy:setup 

se intentará establecer Capistrano en/u/aplicaciones

cap production deploy:setup 

pondrá en marcha Capistrano en el directorio especificado en: deploy_to.

+0

Esto solo es válido si el plugin multietapa está cargado. –

Cuestiones relacionadas