2010-04-03 54 views
7

我正在使用Capistrano和git來部署RoR應用程序。我有一個文件夾下每個用戶有自己的文件夾。當用戶上傳或保存文件時,它會保存在他們自己的文件夾中。如何防止capistrano覆蓋用戶上傳自己文件夾中的文件?

當我將新版本的代碼部署到服務器時,用戶文件和文件夾將被我的開發機器上的內容覆蓋。

有沒有辦法忽略capistrano中的一些文件夾,就像我們在git中做的一樣?這篇文章 - http://www.ruby-forum.com/topic/97539 - 建議使用符號鏈接並將用戶文件存儲在共享文件夾中。但這是一箇舊帖子,所以我想知道現在是否有更好的方法來做到這一點。

此外,有沒有人知道任何良好的屏幕錄像/教程推薦使用RoR + git + capistrano?

謝謝。

回答

10

您應將用戶的文件夾移動到Capistrano的releases目錄之外。通常的做法是讓Capistrano創建應該跨部署保留的目錄的符號鏈接。

下面是從我的Rails博客應用程序的config/deploy.rb由此帖子中用於博客文章和圖片中下載的文件都存儲在一個shared目錄的例子:

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 
+0

謝謝約翰,它是符號鏈接。 – 2010-04-03 10:48:53

0

這是爲時已晚,但我遇到了這個問題。我使用rails 5和capistrano 3.6。我通過創建符號鏈接到共享文件夾來解決此問題。

如果你想保存了public/images/user_images用戶的圖像,並將其符號鏈接到共享文件夾,然後用空間添加的文件夾名稱(您可能已經有這條線在你的deploy.rb

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

像這樣):

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

現在運行cap production deploy,你應該能夠訪問共享文件夾中的圖片。