2010-04-03 21 views
7

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 archivo, se guarda en su propia carpeta.¿Cómo evito que capistrano sobrescriba los archivos cargados por los usuarios en sus propias carpetas?

Cuando despliegue nuevas versiones del código en el servidor, los archivos 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 archivos 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 screencasts/tutoriales para recomendar para usar RoR + git + capistrano?

Gracias.

Respuesta

10

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

He aquí un ejemplo de mi blog de aplicaciones Rails config/deploy.rb mediante el cual los archivos para descargar dentro de blogs y las imágenes utilizadas en los mensajes se almacenan en un directorio shared:

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 #{shared_path}/public/files #{release_path}/public/files" 
    run "ln -nfs #{shared_path}/public/images/posts #{release_path}/public/images/posts" 
    end 
end 
+0

Gracias John, enlaces simbólicos es entonces. –

0

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 tienen esta línea en su deploy.rb

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

Si desea guardar las imágenes del usuario en/images/user_images públicas y enlace simbólico a la carpeta compartida a continuación, añadir 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 ejecute cap production deploy y usted debería ser capaz de acceder a las imágenes en la carpeta compartida.

Cuestiones relacionadas