2011-01-10 19 views
8

Ogni volta che eseguo cap distribuire nel server remoto ho perso alcuni file non verificati perché capistrano crea una nuova directory e controlla la revisione della testina in esso. Ma ci sono alcuni file che non sono versioni come avatar degli utenti (graffetta) e immagini caricate che non vengono copiate nella nuova versione corrente.Mantenere i file senzaversione durante la distribuzione con Capistrano

Come posso risolvere questo?

Grazie!

risposta

14

Personalmente, penso che il modo migliore per gestire questo tipo di cose sia archiviarli nella cartella condivisa e creare un'attività in capistrano per creare collegamenti simbolici alle risorse condivise.

Ecco un esempio di uno dei miei progetti:

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

Capisco ma ... quella dir "condivisa" è una cosa capistrano, Rails non ne sa nulla per quanto ne so. Quindi, come suppongo di dire ai binari di salvare i file in quella directory, che è al di fuori dell'applicazione e non esiste alcun evento nella mia copia locale? – emzero

+0

Non si modifica nulla in Rails. Questo è il punto di questa tattica. Rails salva ancora le immagini su "RAILS_ROOT/public/images/avatars" o altro, ma quella cartella è in realtà un [link simbolico] (http://en.wikipedia.org/wiki/Symbolic_link) a una cartella in "condivisa" di capistrano cartella. – idlefingers

+1

Oh, sì, hai ragione ... non l'ho visto. Grazie! =) – emzero

8

Aggiungendo i percorsi di shared_children funziona anche e in realtà è solo una battuta nel deploy.rb:

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

trovarono qui: astonj

0

Ecco una gemma molto piccola e utile: https://github.com/teohm/capistrano-shared_file. Controlla i documenti della gemma - tutto è semplice.

Installare gioiello, in deploy.rb richiedono e solo fornire una serie di file che si desidera condividere tra uscite in shared_files opzione:

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

memorizzare i file in <project_dir>/shared/files/YOUR_FILE_GOES_HERE. E saranno collegati in modo simbolico alla directory principale dell'applicazione ad ogni distribuzione. È tutto.

Problemi correlati