Capistrano部署到同一服务器上的不同路径

时间:2014-12-24 10:56:36

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

在您的配置文件中:

set :deploy_to, ENV["DEPLOY_PATH"]

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

DEPLOY_PATH="my/path" cap production deploy

答案 1 :(得分:0)

使用capistrano 3.8.2,我在deploy.rb中monkeypatched lib / capistrano / dsl / paths.rb,但后来发现我需要更多工作才能在不同的部署用户处设置git包装器。 结果位于: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

(你可以把它放出来,然后把它缩短成一行,但我发现额外的调试很有用)

然后做:

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的位置的问题。

相关问题