如何使用capistrano将文件复制到一堆服务器

Ada*_*dam 6 capistrano copy file

我使用cap调用很多来在一堆服务器上运行命令.我还想使用capistrano将单个文件推送到一堆服务器.

起初我认为PUT会这样做,但是put会让你为文件创建数据.我不想这样做,我只想将现有文件从我运行capistrano命令的机器复制到其他机器.

如果我可以做这样的事情会很酷:

host1$ cap HOSTS=f1.foo.com,f2.foo.com,f3.foo.com COPY /tmp/bar.bin 
Run Code Online (Sandbox Code Playgroud)

我希望它可以复制主机1:/tmp/bar.bin到f1.foo.com:/tmp/bar.bin和f2.foo.com:/tmp/bar.bin和f3.foo.com:/tmp/ bar.bin

这种事情看起来非常有用,所以我肯定必须有办法做到这一点......

小智 10

upload(from, to, options={}, &block)
Run Code Online (Sandbox Code Playgroud)

上载操作将文件存储在当前任务所针对的所有服务器上的给定路径上.

如果之前曾使用过deploy:upload任务,那么您可能已经知道此方法的工作原理.它采用您要上载的资源的路径和远程服务器上的目标路径.

desc "Uploads CHANGELOG.txt to all remote servers."
task :upload_changelog do
  upload("#{RAILS_ROOT}/CHANGELOG.txt", "#{current_path}/public/CHANGELOG")
end
Run Code Online (Sandbox Code Playgroud)

资源

  • NB.如果你得到一个错误,比如`请指定至少一个要更新的文件或目录`,然后调用`top.upload(...)`而不仅仅是`upload(...)`来消除歧义.参考:http://www.mail-archive.com/capistrano@googlegroups.com/msg04699.html (7认同)
  • 当你运行`cap`时,使用`Rails.root`将不起作用,因为没有加载Rails.在这个例子中,你想要使用`File.expand_path('../../ CHANGELOG.txt',__ FILE __)`. (4认同)