【问题标题】:Capistrano deploy to different path on same serverCapistrano 部署到同一服务器上的不同路径
【发布时间】:2014-12-24 10:56:36
【问题描述】:

我正在尝试使用 capistrano 部署我的应用程序。但我想将我的应用程序部署到同一服务器的多个路径。例如,如果第一次运行我想将它部署到下面的路径

set :deploy_to, '/home/a/some_path/

一旦完成第一个,它应该运行第二个路径

 set :deploy_to, '/home/b/some_path/

等等。有什么建议我怎样才能做到这一点?现在我的单路径部署路径工作正常。

【问题讨论】:

  • 有 2 个文件,运行单独的 cap 命令

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


【解决方案1】:

在你的配置文件中:

set :deploy_to, ENV["DEPLOY_PATH"]

然后,要部署,运行设置DEPLOY_PATH 变量的命令:

DEPLOY_PATH="my/path" cap production deploy

【讨论】:

  • 有没有办法直接在文件上设置路径而不是使用命令行?
【解决方案2】:

使用 capistrano 3.8.2,我在 deploy.rb 中对 lib/capistrano/dsl/paths.rb 进行了猴子补丁,但后来我发现我需要做更多的工作才能在不同的部署用户处正确设置 git wrapper。 结果在:https://gist.github.com/mcr/49e8c7034658120013c1fe49da77c2ac

但是,我把内容的精髓留在这里:

module Capistrano
  module DSL
    module Paths
      def deploy_to
        dir = @host.properties.fetch(:deploy_to) || fetch(:deploy_to)
        puts "For #{@host.hostname} deploy_to: #{dir}"
        dir
      end
    end
  end
end

(你可以去掉puts,把它缩短成一个单行,但我发现额外的调试很有用)

然后做:

server "server.client1.example.com", user: "client1", roles: %w{app db web}, deploy_to: '/client1/app/foobar'
server "server.client2.example.com", user: "client2", roles: %w{app db web}, deploy_to: '/client2/app/foobar'

其中 server.client1.example.com 和 server.client2.example.com 是 CNAME 或同一服务器的重复 A/AAAA 记录。这也隔离了每个客户端到 DNS 的位置的问题。

【讨论】:

  • 虽然上述方法有效,但最终证明是不够的,我已经分叉了 capistrano(和 capistrano-bundler)来尝试完全解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多