2017-01-10 3 views
2

Ich habe Probleme, carrierwave und capistrano miteinander zu spielen.Carrierwave und Capistrano mit Schienen verwenden

Um zu starten, verwende ich this method, um ein öffentliches Verzeichnis und ein privates Controller-behandeltes Verzeichnis für Downloads zu verwenden. Tl; dr, Carrierwave-Wurzel ist eigentlich Rails.root, und nicht public. Jedoch habe ich das für URLs (da Rails public nicht wörtlich in der URL verwendet), indem Sie eine Basisklasse definieren, die den öffentlichen Stamm für alle nicht-privaten Dateien festlegt.

Wie auch immer, ich fing schließlich an zu versuchen, Code zur Produktion zu drücken. Alles ist gut gegangen! Meine Uploads zeigten sich gut. Als ich jedoch eine weitere Bereitstellung durchführte, verlor ich alle meine Bilder im öffentlichen Verzeichnis.

Dies ist ein gut dokumentierter Fall für Capistrano - es beinhaltet nur Einstellung :linked_dirs. In meinem Fall habe ich die folgende Zeile verwendet.

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

Wo public/assets meine allgemeine css/js Dateien waren, public/uploads waren meine Multimedia-Dateien und downloads waren meine geschützten Dateien.

Leider hat dies mein Problem nicht gelöst. Aus irgendeinem Grund erhalten alle Bilder eine 404, obwohl sie im richtigen Pfad aufgelistet werden.

Weider immer noch funktioniert die geschützte downloads Ordner ganz gut! Vielleicht hat das etwas damit zu tun, die Wurzel in Carrierwave zu setzen? An diesem Punkt bin ich versucht, nur Büroklammer für meine öffentlichen Dateien und Carrierwave für private zu nehmen.

Ich bin seit gut 7 Stunden hier und ich kann immer noch nicht herausfinden, was zu tun ist.

meine deploy.rb Datei

meine problematische image uploader Datei

meine Arbeit product file uploader Datei

meine nginx.conf Datei

+0

Gleiche wie du meine Capistrano deploy abgeschlossen haben versucht, ich bin 99% fertig, aber immer noch einige kleine Probleme, habe ich nicht spezifizierte root in meinem fall habe ich einfach 'def speicher;" system/ckeditor/bilder/# {modell.id} "; end;', also nehme ich an, in Ihrem Fall können Sie versuchen, 'def root' zu kommentieren. – sahil

+0

Haben Sie carrierwave so eingerichtet, dass Rails.root standardmäßig anstelle des öffentlichen Verzeichnisses verwendet wird? Ich habe es leider versucht und nicht –

+0

Ich habe meine [Dateien hier] hinzugefügt (https://gist.github.com/sahil290791/4ec9ad72dd0c58ce99b39b93710f70e6), bemerkte ich eine Änderung in Ihrem und meine 'nginx.conf' Datei könnte sein, weil Sie Puma und ich verwenden benutze 'phusion passagier', du hast' location^~/assets/{', wo ich' location^~/system/{'habe und root dann wieder in der Datei' root/home/deploy/apps/x/current/public; '. Ich konnte meinen capistrano - Einsatz mit den letzten Änderungen in 'nginx.conf' abschließen, da ich irgendwann 404 nicht für die Bilder gefunden habe, die in 'public/system' vorhanden waren. – sahil

Antwort

2

am other question & answer you posted suchen, haben Sie restriktive Berechtigungen für den CarrierWave Upload-Verzeichnis eingestellt und Dateien:

# Broken permissions 
CarrierWave.configure do |config| 
    config.permissions = 0600 
    config.directory_permissions = 0700 
    config.storage = :file 
end 

0600 und 0700 Berechtigungen gewähren nur den Zugriff auf den Benutzer, der die Datei oder das Verzeichnis besitzt. Dies liegt daran, dass sowohl die dritten & vierten Bits "Gruppe" und "alle" auf 0 gesetzt werden.

Nginx, Puma, und Capistrano laufen wahrscheinlich nicht alle unter demselben Benutzer, was diese Benutzer nur bedeutet Berechtigungen blockieren nginx vor dem Lesen der Dateien (verursacht 403 Fehler nach dem Upload) und blockieren Capistrano von der Verknüpfung der public/uploads Verzeichnis (verursacht 404 Fehler nach neuen Bereitstellungen).

Verwenden Sie stattdessen offener Berechtigungen, wie, was auf dem CarrierWave README aufgeführt ist:

# Fixed permissions 
CarrierWave.configure do |config| 
    config.permissions = 0666 
    config.directory_permissions = 0777 
    config.storage = :file 
end 
Verwandte Themen