2013-10-15 12 views
5

Ich habe eine App, die Benutzer Bilder hochladen und sie werden über CarrierWave in den öffentlichen Ordner in einem Ordner namens uploads/images/gespeichert.Verhindern, dass bestimmte Ordner im Öffentlichen Ordner gelöscht werden capistrano rails

Mir ist gerade aufgefallen, dass seit meinem letzten Deployment die Upload- (und Bilder-) Ordner nicht mehr vorhanden sind.

Könnte es sein, dass ich den Ordner und die Dateien auf dem Produktionsserver lösche, wenn ich mit Capistrano aufsteige?

Wie kann ich sagen, dass der Ordner public/uploads bei allen Bereitstellungen beibehalten werden soll?

Danke Stack!

Antwort

6

Ich würde empfehlen, eine Capistrano Aufgabe zu machen, die einen Symlink zum freigegebenen Ordner erstellt. Der Symlink fungiert als Link zum Verzeichnis, so dass der gesamte Upload/Speicher-Code wie gewohnt funktioniert.

Capistrano Aufgabe Beispiel:

before "deploy:restart", :symlink_directories 
task :symlink_directories do 
    run "ln -nfs #{shared_path}/uploads #{release_path}/public/uploads" 
end 
+0

Könnten Sie dies empfehlen einen guten Spaziergang durch/Beispiel zu tun, „set“ kann? Ich bin neu bei Rails und Capistrano, also lerne ich immer noch. – Devan

+2

Setzen Sie einfach die obige Aufgabe in Ihre deploy.rb und ändern Sie die Pfade für Ihre Anwendung passend – jvperrin

+0

Also habe ich die Aufgabe in meine deploy.rb, aber wenn ich zum öffentlichen/uploads-Ordner für die aktuelle Version navigieren sagt es Symlink "Uploads" können nicht aufgelöst werden. Ich habe eigentlich keine "öffentlichen/uploads" in meinem freigegebenen Ordner. Soll ich das manuell erstellen? – Devan

1

Ich möchte für diejenigen, diese Antwort aktualisieren, sucht das gleiche mit Capistrano v3.9.1

In Ihrer deploy.rb Datei zu tun, können Sie die folgenden hinzufügen

set :linked_dirs, %w{public/uploads/} 

Wie in der obigen Antwort, symbolisiert dieses Symbol Verzeichnisse während der Bereitstellung in das Release.

Ideal für Verzeichnisse wie Upload, wo wir den Inhalt nicht überschreiben möchten.

Für eine vollständige Liste der Variablen, die Sie sehen die capistrano docs here.

+0

Ihre Antwort sollte einige Erklärungen sowie erforderlichen Code enthalten. – svgrafov

+0

@svgrafov Ich habe eine bessere Erklärung geliefert und mit der Quelle verknüpft. Beachten Sie, dass der erforderliche Code bereits festgelegt ist. Kein Wortspiel beabsichtigt. – DavidA26

+0

"Beachten Sie auch, dass der erforderliche Code bereits eingestellt ist" Es muss ein Missverständnis geben, weil ich meinte "Sie haben einen Quellcode, warum fügen Sie dann keine Erklärung hinzu?" – svgrafov

Verwandte Themen