我需要部署到2个不同的服务器,这两个服务器有不同的身份validation方法(一个是我的大学的服务器,另一个是AWS的amazon web services器)
我已经为我的大学的服务器运行了capistrano,但我不知道如何将部署添加到AWS,因为对于这个,我需要为用户.pem文件添加ssh选项,例如:
ssh_options[:keys] = [File.join(ENV["HOME"], ".ssh", "test.pem")] ssh_options[:forward_agent] = true
我已经浏览了starckoverflow,没有提及如何处理这个和这个不同的身份validation方法
我发现了一篇文章 ,讲述了两个不同的密钥,但是这个引用了一个服务器和一个git,它们都使用不同的pem文件。 不是这种情况。
我到了这个教程 ,但找不到我需要的。
我不知道这是否与我所要求的相关:我正在使用ruby 1.9.2p290和rails 3.0.10的Rails应用程序,我正在使用svn存储库
请任何帮助欢迎。 非常感谢
这最好通过ssh-configs而不是Capistrano直接处理。 无论如何,这很容易。 技巧是保罗在Stackoverflow上的答案 。 你会build立你的~/.ssh/config文件来为你正在寻找的主机提供所需的参数。 令人高兴的是,这个configuration文件可以接受通配符,从而更容易区分AWS和Univ机器。
Host *.univ.edu IdentityFile ~/.ssh/id_rsa Host [aws things] IdentityFIle ~/.ssh/aws.pem ForwardAgent Yes
IdentityFile指令告诉SSH使用哪个SSH密钥,这是你如何告诉它select正确的一个取决于你要去的地方。 ForwardAgent等同于您提到的Capistrano指令。
我使用capistrano-ext扩展的多级来做这件事。
gem install capistrano-ext
我在config/deploy/创build了几个不同的阶段 ,每个阶段都有自己的capistrano设置。
lunix@madeira] (master) -> cat config/deploy/foo.rb set :user, 'ubuntu' ssh_options[:keys] = File.expand_path('~/.ssh/awsfoo.pem') server 'foo-01.example.com', :foo
。
lunix@madeira] (master) -> cat config/deploy/bar.rb set :user, 'aussielunix' ssh_options[:keys] = File.expand_path('~/.ssh/awsbar.pem') server 'bar-01.example.org', :bar
现在只是在任务的前面,你想要运行任务的阶段 。
cap foo deploy cap bar deploy