Capistrano和Carrierwave

我正在使用Capistrano部署Ruby on Rails和NodeJS应用程序。 每次部署时都会删除uploads文件夹。

这出现在几个地方,但它似乎不起作用:

# 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 

谢谢!

确保删除现有的public / uploads文件夹,将-f传递给ln并不包括删除目标目录(或者至少我没有这样做)

我的符号链接目录任务通常是这样的

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

显然,请确保您需要的公共/上传的签入版本中没有任何内容!

这个问题有另一个解决方案。 你可以将你的uploads目录添加到Capistrano的shared_children ,它会自动完成所有魔法。 您可以在此答案中找到更多详细信息: https : //stackoverflow.com/a/9710542/835935

你试过了吗

 after 'deploy:update_code', ':symlink_uploads' 

您的:symlink_uploads任务不在命名空间中,所以请执行上述操作或将其放在命名空间中

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

我的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。