卡皮斯特拉诺不尊重港口

时间:2017-07-05 14:05:25

标签: ruby-on-rails-4 capistrano

我正在按照以下方式部署到生产部门:

HOSTS = [
  'api1.app.io',
  'api2.app.io',
  'api3.app.io',
  'api4.app.io',
  'api5.app.io',
  'api6.app.io',
  'api7.app.io',
  'api8.app.io',
  'api9.app.io',
  'api10.app.io'
].freeze

HOSTS.each do |host|
  server host, roles: %i[app web], user: 'deploy', port: 2323
end

虽然当capistrano尝试ssh到服务器时失败,因为它仍尝试使用端口22进行连接...

(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing on host api2.app.io: Net::SSH::ConnectionTimeout

Net::SSH::ConnectionTimeout: Net::SSH::ConnectionTimeout

Errno::ETIMEDOUT: Connection timed out - connect(2) for xx.xx.xx.xx:22

还有其他配置端口的方法吗?

1 个答案:

答案 0 :(得分:1)

:port选项应该有效。如果没有,那就是一个bug。请在https://github.com/capistrano/capistrano/issues打开错误报告。

作为一种变通方法,您还可以使用<host>:<port>语法通过主机名指定端口,如下所示:

HOSTS.each do |host|
  server "#{host}:#{port}", roles: %i[app web], user: 'deploy'
end