我正在尝试使用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部署。 提前谢谢。
答案 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'