set:linked_files和set:linked_files用于capistrano3中的上传

时间:2015-02-03 10:21:39

标签: ruby ruby-on-rails-3 deployment capistrano capistrano3

我正在尝试使用capistrano3将我的文件和文件夹上传到我的服务器。 我希望在所有版本中共享该文件夹。例如,我有一个名为media的文件夹,它包含子目录和文件。我希望将它放在Capistrano 3创建的共享目录下。 我见过这个

set :linked_files, %w{config/database.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

有没有办法可以将媒体的所有文件和子目录上传到共享目录。

注意:基本上我希望我的上传不受capistrano3的影响。有没有办法我只是创建uploads文件夹的结构,它将保持完整从我的capistrano部署。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您希望在所有版本中共享该文件夹,请将media目录添加到linked_dirs

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

然后写一个这样的任务:

namespace :deploy do
  desc 'upload media files'
  task :upload_media_files do
    remote_path, local_path = "#{fetch(:deploy_to)}/shared/media", '/your/local/media/path'
    on release_roles :app do
      upload!(local_path, remote_path, recursive: true)
    end
  end
end

after 'deploy:check', 'deploy:upload_media_files'

它是scp命令。根据{{​​3}},命令为:scp -t -r /remote/shared/media

如果您不想覆盖现有文件,则应使用rsync

namespace :deploy do
  desc 'upload media files'
  task :upload_media_files do
    remote_path, local_path = "#{fetch(:deploy_to)}/shared", '/your/local/media/path'
    on release_roles :app do |server|
      system("rsync -avzr #{local_path} #{fetch(:deployer)}@#{server.hostname}:#{remote_path}")
    end
  end
end

after 'deploy:check', 'deploy:upload_media_files'