【问题标题】:How to copy a file to a bunch of servers with capistrano如何使用 capistrano 将文件复制到一堆服务器
【发布时间】:2011-06-14 00:14:51
【问题描述】:

我经常使用 cap invoke 在一堆服务器上运行命令。我还想使用 capistrano 将单个文件推送到一堆服务器。

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

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

host1$ cap HOSTS=f1.foo.com,f2.foo.com,f3.foo.com COPY /tmp/bar.bin 

我希望这会将 host1:/tmp/bar.bin 复制到 f1.foo.com:/tmp/bar.bin 和 f2.foo.com:/tmp/bar.bin 和 f3.foo.com: /tmp/bar.bin

这种东西看起来很有用,所以我相信一定有办法做到这一点......

【问题讨论】:

    标签: file copy capistrano


    【解决方案1】:
    upload(from, to, options={}, &block)
    

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

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

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

    source

    【讨论】:

    • 注意。如果您收到类似Please specify at least one file or directory to update 的错误,请致电top.upload(...) 而不仅仅是upload(...) 来消除歧义。参考:mail-archive.com/capistrano@googlegroups.com/msg04699.html
    • 如果您使用的是 Rails 3,请记住使用 Rails.root 而不是 RAILS_ROOT
    • 使用Rails.root 将不起作用,因为运行cap 时不会加载Rails。在此示例中,您希望使用 File.expand_path('../../CHANGELOG.txt', __FILE__)
    【解决方案2】:

    这会将所有文件上传到各自的服务器。

    cap 部署:上传 FILES=abc,def

    【讨论】:

      【解决方案3】:

      显示所有任务:

      cap -T
      cap deploy                # Deploys your project.
      cap deploy:check          # Test deployment dependencies.
      cap deploy:cleanup        # Clean up old releases.
      cap deploy:cold           # Deploys and starts a `cold'...
      cap deploy:create_symlink # Updates the symlink to the ...
      cap deploy:migrations     # Deploy and run pending migr...
      cap deploy:pending        # Displays the commits since ...
      cap deploy:pending:diff   # Displays the `diff' since y...
      cap deploy:rollback       # Rolls back to a previous ve...
      cap deploy:rollback:code  # Rolls back to the previousl...
      cap deploy:setup          # Prepares one or more server...
      cap deploy:symlink        # Deprecated API.
      cap deploy:update         # Copies your project and upd...
      cap deploy:update_code    # Copies your project to the ...
      cap deploy:upload         # Copy files to the currently...
      cap deploy:web:disable    # Present a maintenance page ...
      cap deploy:web:enable     # Makes the application web-a...
      cap integration           # Set the target stage to `in...
      cap invoke                # Invoke a single command on ...
      cap multistage:prepare    # Stub out the staging config...
      cap production            # Set the target stage to `pr...
      cap shell                 # Begin an interactive Capist...
      

      你可以使用:

      cap deploy:upload
      

      见: https://github.com/capistrano/capistrano/wiki/Capistrano-Tasks#deployupload

      【讨论】:

        【解决方案4】:

        任何没有cap deploy:upload 的人都可以尝试使用cap invoke 来拉取文件而不是推送它。例如:

        cap invoke COMMAND='scp host.where.file.is:/path/to/file/there /target/path/on/remote`
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-17
          • 2022-12-09
          • 2014-04-05
          • 2016-02-02
          • 2010-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多