2010-04-03 11 views
7

Ich verwende Capistrano und git, um eine RoR-App bereitzustellen. Ich habe einen Ordner, unter dem jeder Benutzer seinen eigenen Ordner hat. Wenn ein Benutzer eine Datei hochlädt oder speichert, wird sie in einem eigenen Ordner gespeichert.Wie verhindere ich, dass capistrano Dateien überschreibt, die von Benutzern in ihren eigenen Ordnern hochgeladen wurden?

Wenn ich neue Versionen des Codes auf dem Server bereitstellen, werden die Benutzerdateien und Ordner mit dem, was auf meinem Dev-Computer ist, überschrieben.

Gibt es eine Möglichkeit, einige Ordner in Capistrano zu ignorieren, wie wir es in Git tun? Dieser Beitrag - http://www.ruby-forum.com/topic/97539 - schlägt vor, Symlinks zu verwenden und die Benutzerdateien in einem freigegebenen Ordner zu speichern. Aber es ist ein alter Post, also frage ich mich, ob es jetzt einen besseren Weg gibt.

Gibt es auch jemanden, der gute Screencasts/Tutorials für die Verwendung von RoR + git + capistrano kennt?

Danke.

Antwort

10

Sie sollten die Ordner des Benutzers außerhalb des Verzeichnisses releases von Capistrano verschieben. Der übliche Ansatz besteht darin, dass Capistrano symbolische Verknüpfungen zu den Verzeichnissen erstellt, die in Bereitstellungen beibehalten werden sollen.

Hier ist ein Beispiel aus meiner Rails Blog Anwendung config/deploy.rb wobei Dateien zum Download in Blog-Posts und Bildern in Beiträgen, die in einem shared Verzeichnis abgelegt:

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 
  • Ihre zweite Frage zu beantworten, empfehle ich PeepCode und
+0

Dank John, symbolische Links ist es dann. –

0

Das ist zu spät, aber ich stieß auf dieses Problem. Ich benutze Schienen 5 und Capistrano 3.6. Ich habe dieses Problem gelöst, indem ich einen Symlink zum freigegebenen Ordner erstellt habe.

Sie könnten bereits diese Zeile in Ihrer deploy.rb

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

Wenn Sie Benutzer möchten die Bilder in der Öffentlichkeit/images/user_images und Symlink es freigegebenen Ordner fügen Sie dann den Ordnernamen mit einem Platz sparen (wie diese):

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

Jetzt cap production deploy laufen und Sie sollten die Bilder in freigegebenen Ordner zugreifen können.

Verwandte Themen