¿Cómo evito que capistrano sobrescriba los files cargados por los usuarios en sus propias carpetas?

Estoy usando Capistrano y git para implementar una aplicación RoR. Tengo una carpeta en la que cada usuario tiene su propia carpeta. Cuando un usuario carga o guarda un file, se guarda en su propia carpeta.

Cuando implemento nuevas versiones del código en el server, los files y las carpetas del usuario se sobrescriben con lo que hay en mi máquina de desarrollo.

¿Hay alguna manera de ignorar algunas carpetas en capistrano, como hacemos en git? Esta publicación – http://www.ruby-forum.com/topic/97539 – sugiere el uso de enlaces simbólicos y el almacenamiento de los files del usuario en una carpeta compartida. Pero es una publicación anterior, así que me pregunto si hay una mejor manera de hacerlo ahora.

Además, ¿alguien sabe de algún buen screencast / tutorial para recomendar para usar RoR + git + capistrano?

Gracias.

Debe mover las carpetas del usuario fuera del directory de releases de Capistrano. El enfoque habitual es que Capistrano cree enlaces simbólicos a los directorys que deben conservarse en todas las implementaciones.

Aquí hay un ejemplo de la config/deploy.rb de mi aplicación Rails en la que los files para download dentro de las publicaciones de blog y las imágenes que se usan en las publicaciones se almacenan en un directory shanetworking :

 after :deploy, 'deploy:link_dependencies' namespace :deploy do desc <<-DESC Creates symbolic links to configuration files and other dependencies after deployment. DESC task :link_dependencies, :roles => :app do run "ln -nfs #{shanetworking_path}/public/files #{release_path}/public/files" run "ln -nfs #{shanetworking_path}/public/images/posts #{release_path}/public/images/posts" end end 
  • Para responder a su segunda pregunta, recomiendo PeepCode y Railscasts

Esto es demasiado tarde, pero me encontré con este problema. Uso rails 5 y capistrano 3.6. Resolví este problema creando un enlace simbólico a la carpeta compartida.

Es posible que ya tenga esta línea en su deploy.rb

 set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle} 

Si desea save las imágenes del usuario en public / images / user_images y enlazarlas a la carpeta compartida, agregue el nombre de la carpeta con un espacio (como este):

 set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/images/user_images} 

Ahora ejecuta la cap production deploy y deberías poder acceder a las imágenes en la carpeta compartida.