2011-01-10 18 views
8

Cada vez que ejecuto cap deploy en el servidor remoto Perdí algunos archivos no versionados porque capistrano crea un nuevo directorio y comprueba la revisión del encabezado en él. Pero hay algunos archivos que no tienen versiones, como los avatares de los usuarios (clips) e imágenes cargadas que no se copian a la nueva versión actual.Guardar archivos no versionados al implementar con Capistrano

¿Cómo puedo solucionar esto?

Gracias!

Respuesta

14

Personalmente, creo que la mejor manera de tratar con ese tipo de cosas es almacenarlas en la carpeta compartida y crear una tarea en capistrano para crear enlaces simbólicos a los recursos compartidos.

He aquí un ejemplo de uno de mis proyectos:

set :shared_assets, %w{public/images/products public/images/barcodes} 

namespace :assets do 
    namespace :symlinks do 
    desc "Setup application symlinks for shared assets" 
    task :setup, :roles => [:app, :web] do 
     shared_assets.each { |link| run "mkdir -p #{shared_path}/#{link}" } 
    end 

    desc "Link assets for current deploy to the shared location" 
    task :update, :roles => [:app, :web] do 
     shared_assets.each { |link| run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}" } 
    end 
    end 
end 

before "deploy:setup" do 
    assets.symlinks.setup 
end 

before "deploy:symlink" do 
    assets.symlinks.update 
end 
+0

Entiendo pero ... ese "compartido" dir es una cosa capistrano, Rails no lo sabe hasta donde yo sé. Entonces, ¿cómo supongo que le digo a los rieles que guarden los archivos en ese directorio, que está fuera de la aplicación y que no existe en mi copia local? – emzero

+0

No cambia nada en Rails. Ese es el objetivo de esta táctica. Rails aún guarda las imágenes en "RAILS_ROOT/public/images/avatars" o lo que sea, pero esa carpeta es en realidad un [enlace simbólico] (http://en.wikipedia.org/wiki/Symbolic_link) a una carpeta en "compartida" de capistrano carpeta. – idlefingers

+1

Ohh, sí, tienes razón ... No lo vi. ¡Gracias! =) – emzero

8

Adición de sus caminos a shared_children también funciona y es en realidad una sola línea en su deploy.rb:

set :shared_children, shared_children + %w{public/uploads} 

lo encontraron aquí: astonj

0

Aquí está la gema muy pequeña y útil: https://github.com/teohm/capistrano-shared_file. Verifique los documentos de la gema, todo es simple.

Instalar gema, en deploy.rb requieren y sólo proporciona un conjunto de archivos que desea compartir entre los lanzamientos en shared_files opción:

set :shared_files, %w(config/database.yml) 

almacenar sus archivos en <project_dir>/shared/files/YOUR_FILE_GOES_HERE. Y se vincularán simbólicamente a la raíz de su aplicación en cada implementación. Eso es todo.

Cuestiones relacionadas