2012-05-14 40 views
2

我正在部署使用Capistrano的Ruby on Rails和NodeJS應用程序。上傳文件夾在每次部署時都會被刪除。Capistrano和Carrierwave

這突然出現在好幾個地方,但它似乎並沒有工作:

# Keep File Uploads 
    task :symlink_uploads do 
    run "ln -nfs #{shared_path}/rails/uploads #{release_path}/rails/public/uploads" 
    end 

    after 'deploy:update_code', 'deploy:symlink_uploads' 

回購:

repo: 
    /node 
    /rails 

謝謝!

回答

2

請確保您刪除現有的公共/上傳文件夾中,通過-fln不包括刪除目標目錄(或者至少沒有爲我移植過)

我的s ymlink目錄任務通常看起來像

task :symlink_uploads do 
    run "rm -rf #{release_path}/rails/public/uploads} && ln -nfs #{shared_path}/rails/uploads #{release_path}/rails/public/uploads" 
end 

顯然,確保在您需要的公共/上傳的檢入版本中沒有任何內容!

+0

不。沒有工作。也許我需要添加其他的東西?這似乎是一個好方法 – CamelCamelCamel

+0

有權限問題,沒有-nFs,也不得不從回購中刪除上傳文件夾。當我可以的時候會給你賞金。 – CamelCamelCamel

1

你嘗試

after 'deploy:update_code', ':symlink_uploads' 

:symlink_uploads任務不是在一個命名空間,因此而做上面或把它放在一個命名空間

namespace :deploy do 
    task :symlink_uploads do 
    # ... 
    end 
end 
+0

我做了,代碼位於deploy命名空間中。 – CamelCamelCamel

+0

好的,對不起 - 以爲它太容易了:) – Vapire

3

這個問題還有另一種解決方案。你可以將你的uploads目錄添加到Capistrano的shared_children,它會自動完成所有的魔法。你可以在這個答案中找到更多的細節:https://stackoverflow.com/a/9710542/835935

+0

我也試過這個。如果rails是repo的根目錄,它會起作用。日誌和系統使用這個,我懷疑他們的符號鏈接也不起作用。 – CamelCamelCamel

0

我與我的RoR應用程序上傳的文件也有類似的問題。這是我的Capistrano的任務:

... 
task :link_public_folder, :roles => [:app, :web] do 
    run "mv -u #{release_path}/public/* #{shared_path}/public" 
    run "rm -rf #{release_path}/public" 
    run "ln -s #{shared_path}/publiC#{release_path}/public" 
    end 
    after "deploy:update", "deploy:link_public_folder" 

    task :setup_config, :roles => :app do 
    sudo "ln -nfs #{current_path}/config/apache.conf /etc/apache2/sites-available/#{application}" 
    run "mkdir -p #{shared_path}/config" 
    run "mkdir -p #{shared_path}/public" 
    put File.read("config/database.yml"), "#{shared_path}/config/database.yml" 
    puts "Now edit the config files in #{shared_path}." 
    end 
    after "deploy:setup", "deploy:setup_config" 
... 

也許幫助您

編輯: 我用Carrierwave了。