2013-10-15 92 views
5

我有一個應用程序,用戶上傳圖片,並通過CarrierWave將其存儲到公用文件夾中名爲uploads/images /的文件夾中。防止刪除公共文件夾中的某個文件夾capistrano rails

我剛剛注意到,自從我最近部署以來,上傳(和圖像)文件夾不再存在。

當我用Capistrano進行部署時,是否可以刪除生產服務器上的文件夾和文件?

我該如何告訴它通過所有部署保持相同的public/uploads文件夾?

謝謝堆棧!

回答

6

我會建議做一個capistrano任務,創建一個符號鏈接到共享文件夾。符號鏈接將作爲目錄的鏈接,因此您的所有上傳存儲/檢索代碼將正常工作。

Capistrano的任務,例如:

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

您建議通過這樣的/例子好走?我是Rails和Capistrano的新手,所以我還在學習。 – Devan

+2

只需將上述任務放入deploy.rb並將路徑更改爲適合您的應用程序 – jvperrin

+0

因此,我將任務放入了我的deploy.rb,但是,當我導航到當前版本的public/uploads文件夾時,它說它無法解析符號鏈接「上傳」。 我實際上沒有在我的共享文件夾中有「public/uploads」。我應該手動創建? – Devan

1

我想更新這個答案對於那些希望做同樣的Capistrano的v3.9.1

在你deploy.rb文件,你可以添加以下

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

就像在上面的答案中一樣,這個符號在部署期間將符號鏈接到發行版中。

理想的目錄,如上載,我們不想覆蓋的內容。

有關,你可以在「設置」變量的完整列表,請參閱capistrano docs here.

+0

您的答案應包括一些解釋以及所需的代碼。 – svgrafov

+0

@svgrafov我提供了一個更好的解釋並鏈接到源代碼。另請注意,必需的代碼已被設置。沒有雙關語意。 – DavidA26

+0

「另外請注意,必需的代碼已經設置」 必須有一些誤解,因爲我的意思是「你有一個源代碼,那麼爲什麼不添加一些解釋?」 – svgrafov

相關問題