2

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

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

# 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

谢谢!

4

4 回答 4

3

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

于 2012-05-16T21:47:18.487 回答
2

确保删除现有的 public/uploads 文件夹,传递-fln不包括删除目标目录(或者至少对我来说没有这样做)

我的符号链接目录任务通常看起来像

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

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

于 2012-05-16T21:38:17.333 回答
1

你试过了吗

after 'deploy:update_code', ':symlink_uploads'

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

namespace :deploy do
  task :symlink_uploads do
    # ...
  end
end
于 2012-05-16T21:05:20.787 回答
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。

于 2012-05-16T21:57:01.547 回答