2010-04-03 10 views
7

Sto utilizzando Capistrano e git per distribuire un'applicazione RoR. Ho una cartella in cui ogni utente ha la propria cartella. Quando un utente carica o salva un file, viene salvato nella propria cartella.Come impedire a capistrano di sovrascrivere i file caricati dagli utenti nelle proprie cartelle?

Quando distribuisco nuove versioni del codice sul server, i file e le cartelle dell'utente vengono sovrascritte con quello che è nella mia macchina di sviluppo.

C'è un modo per ignorare alcune cartelle in capistrano, come facciamo in git? Questo post - http://www.ruby-forum.com/topic/97539 - suggerisce di utilizzare i collegamenti simbolici e di archiviare i file utente in una cartella condivisa. Ma è un vecchio post, quindi mi chiedo se c'è un modo migliore per farlo ora.

Inoltre, qualcuno sa di buoni screencast/tutorial da consigliare per l'uso di RoR + git + capistrano?

Grazie.

risposta

10

È necessario spostare le cartelle dell'utente all'esterno della directory releases di Capistrano. L'approccio abituale è quello di fare in modo che Capistrano crei collegamenti simbolici alle directory che devono essere conservate tra le distribuzioni.

Ecco un esempio dal mio Rails applicazione blog config/deploy.rb cui i file per il download all'interno dei post e le immagini del blog utilizzati all'interno di messaggi vengono memorizzati in una directory 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

Grazie Giovanni, collegamenti simbolici è allora. –

0

Questo è troppo tardi ma ho incontrato questo problema. Uso le rotaie 5 e capistrano 3.6. Ho risolto questo problema creando un collegamento simbolico alla cartella condivisa.

Si potrebbe già avere questa linea nel vostro deploy.rb

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

Se si desidera salvare le immagini dell'utente in/images/user_images pubblici e link simbolico a cartella condivisa quindi aggiungere il nome della cartella con uno spazio (come questo):

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

Ora gestita cap production deploy e si dovrebbe essere in grado di accedere alle immagini nella cartella condivisa.

Problemi correlati