论坛首页 Ruby版 rails

如何用capistrano从一个远程服务器连接到另外一台服务器

浏览 386 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-04-09
task mytask, :roles=> :myroles do
    run "ls -l"
    //do something
    // ssh 到另外一台服务器,应该怎么写?
end

已经通过capistrano连接到远程服务器,并进行了一些操作,但在这个task中,我需要从远程服务器再次连接到另外一台服务器上。应该怎么写?

我尝试使用了
Capistrano::SSH.connect(server(TARGET_SERVER,:target_db)) {
    run "echo 'cat #{MAINDUMP} | mysql --user=#{TARGET_DB_ROOT} #{TARGET_PRODDB}'"
}

但始终有异常
/xanadutmp/jintao/lib/ruby-1.8.6-p111/lib/ruby/gems/1.8/gems/capistrano-2.2.0/lib/capistrano/ssh.rb:96:in `connect': undefined method `user' for [:target_db]:Array (NoMethodError)
from ./config/deploy.rb:149:in `load'

有没有人有类似的需求的,是怎么处理的?
   
最后更新时间:2008-04-09
“,但在这个task中,我需要从远程服务器再次连接到另外一台服务器上。应该怎么写?”

----------

你可以用 ssh username@host [command] 格式写在 run 里面

比如

task mytask, :roles=> :myroles do
run "ls -l"
//do something
run "ssh user@server tail logs/my.log"
end

如果你可以在本地连第二台服务器的话,可以定义两个同类role,然后给需要进行设置的那个role加一个symbole。这样维护比较轻松一些。

比如

role :db, "server1.com"
role :db, "server2.com", :get_log => true

task mytask, :roles => :db, :only => { :get_log => true } do
   run 'tail logs/my.log'
end
   
0 请登录后投票
最后更新时间:2008-04-11
谢谢你的回复。我昨天找到了错误的原因。 两台服务器的密码是不一样的。貌似Capistrano可以做我上述提到的这种连接。但前提条件是两台服务器操作的用户名和密码必须一致。如果不一致的话,Capsitrano不会提示你输入另外一台服务器的密码。而是直接出权限错误。然后就自动退出了。
   
0 请登录后投票
最后更新时间:2008-04-11
谢谢你的回复。我昨天找到了错误的原因。 两台服务器的密码是不一样的。貌似Capistrano可以做我上述提到的这种连接。但前提条件是两台服务器操作的用户名和密码必须一致。如果不一致的话,Capsitrano不会提示你输入另外一台服务器的密码。而是直接出权限错误。然后就自动退出了。
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐