我正在尝试使用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部署中保持不变。提前谢谢。
发布于 2015-02-05 14:46:14
如果您希望在所有版本之间共享该文件夹,请将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
命令。根据source code,命令应该是: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'
https://stackoverflow.com/questions/28296492
复制相似问题