Capistrano上限生产部署:初始Net :: SSH :: ConnectionTimeout

时间:2017-12-11 23:00:09

标签: ruby-on-rails ruby ssh

我正在按照本教程设置一个简单的rails应用程序的网络服务器:https://www.digitalocean.com/community/tutorials/deploying-a-rails-app-on-ubuntu-14-04-with-capistrano-nginx-and-puma使用nginx和capistrano。

我的deploy.rb文件:

# Change these
server '45.33.11.11', port: 22, roles: [:web, :app, :db], primary: true

set :repo_url,        'git@bitbucket.org:slucha/supplement.git'
set :application,     'supplementtests'
set :user,            'deploy'
set :puma_threads,    [4, 16]
set :puma_workers,    0

# Don't change these unless you know what you're doing
set :pty,             true
set :use_sudo,        false
set :stage,           :production
set :deploy_via,      :remote_cache
set :deploy_to,       "/home/#{fetch(:user)}/apps/#{fetch(:application)}"
set :puma_bind,       "unix://#{shared_path}/tmp/sockets/#{fetch(:application)}-puma.sock"
set :puma_state,      "#{shared_path}/tmp/pids/puma.state"
set :puma_pid,        "#{shared_path}/tmp/pids/puma.pid"
set :puma_access_log, "#{release_path}/log/puma.error.log"
set :puma_error_log,  "#{release_path}/log/puma.access.log"
set :ssh_options,     { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub) }
set :puma_preload_app, true
set :puma_worker_timeout, nil
set :puma_init_active_record, true  # Change to false when not using ActiveRecord

## Defaults:
# set :scm,           :git
# set :branch,        :master
# set :format,        :pretty
# set :log_level,     :debug
# set :keep_releases, 5

## Linked Files & Directories (Default None):
# set :linked_files, %w{config/database.yml}
# set :linked_dirs,  %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

namespace :puma do
  desc 'Create Directories for Puma Pids and Socket'
  task :make_dirs do
    on roles(:app) do
      execute "mkdir #{shared_path}/tmp/sockets -p"
      execute "mkdir #{shared_path}/tmp/pids -p"
    end
  end

  before :start, :make_dirs
end

namespace :deploy do
  desc "Make sure local git is in sync with remote."
  task :check_revision do
    on roles(:app) do
      unless `git rev-parse HEAD` == `git rev-parse origin/master`
        puts "WARNING: HEAD is not the same as origin/master"
        puts "Run `git push` to sync changes."
        exit
      end
    end
  end

  desc 'Initial Deploy'
  task :initial do
    on roles(:app) do
      before 'deploy:restart', 'puma:start'
      invoke 'deploy'
    end
  end

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      invoke 'puma:restart'
    end
  end

  before :starting,     :check_revision
  after  :finishing,    :compile_assets
  after  :finishing,    :cleanup
  after  :finishing,    :restart
end

# ps aux | grep puma    # Get puma pid
# kill -s SIGUSR2 pid   # Restart puma
# kill -s SIGTERM pid   # Stop puma

和Capfile

# Load DSL and Setup Up Stages
require 'capistrano/setup'
require 'capistrano/deploy'

require 'capistrano/rails'
require 'capistrano/bundler'
require 'capistrano/rvm'
require 'capistrano/puma'
require "capistrano/scm/git"



# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

install_plugin Capistrano::Puma
install_plugin Capistrano::SCM::Git

安装了Nginx,为bitbucket ssh设置了ssh密钥,为repo设置了部署密钥,并且rvm也安装在服务器上

cap staging deploy:check命令没有错误但是当我尝试运行cap production deploy:initial时出现以下错误

** Invoke production (first_time)
** Execute production
** Invoke load:defaults (first_time)
** Execute load:defaults
** Invoke bundler:map_bins (first_time)
** Execute bundler:map_bins
** Invoke deploy:set_rails_env (first_time)
** Execute deploy:set_rails_env
** Invoke deploy:set_linked_dirs (first_time)
** Execute deploy:set_linked_dirs
** Invoke deploy:set_rails_env 
** Invoke rvm:hook (first_time)
** Execute rvm:hook
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as root@45.79.147.60: Net::SSH::ConnectionTimeout
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
Net::SSH::ConnectionTimeout: Net::SSH::ConnectionTimeout
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/net-ssh-4.2.0/lib/net/ssh/transport/session.rb:90:in `rescue in initialize'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/net-ssh-4.2.0/lib/net/ssh/transport/session.rb:57:in `initialize'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/net-ssh-4.2.0/lib/net/ssh.rb:237:in `new'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/net-ssh-4.2.0/lib/net/ssh.rb:237:in `start'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/connection_pool.rb:59:in `call'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/connection_pool.rb:59:in `with'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/netssh.rb:176:in `with_ssh'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/netssh.rb:129:in `execute_command'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:141:in `block in create_command_and_execute'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:141:in `tap'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:141:in `create_command_and_execute'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:55:in `test'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/capistrano-rvm-0.1.2/lib/capistrano/tasks/rvm.rake:21:in `block (3 levels) in <top (required)>'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:29:in `instance_exec'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:29:in `run'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
Errno::ETIMEDOUT: Connection timed out - connect(2) for 45.79.147.60:22
/home/jan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/socket.rb:65:in `connect'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/socket.rb:65:in `connect_internal'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/socket.rb:140:in `connect'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/socket.rb:338:in `block in tcp'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/socket.rb:232:in `each'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/socket.rb:232:in `foreach'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/socket.rb:328:in `tcp'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/net-ssh-4.2.0/lib/net/ssh/transport/session.rb:70:in `initialize'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/net-ssh-4.2.0/lib/net/ssh.rb:237:in `new'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/net-ssh-4.2.0/lib/net/ssh.rb:237:in `start'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/connection_pool.rb:59:in `call'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/connection_pool.rb:59:in `with'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/netssh.rb:176:in `with_ssh'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/netssh.rb:129:in `execute_command'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:141:in `block in create_command_and_execute'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:141:in `tap'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:141:in `create_command_and_execute'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:55:in `test'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/capistrano-rvm-0.1.2/lib/capistrano/tasks/rvm.rake:21:in `block (3 levels) in <top (required)>'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:29:in `instance_exec'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/backends/abstract.rb:29:in `run'
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/sshkit-1.15.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
Tasks: TOP => rvm:hook

为何超时?

更新

ssh -T git@bitbucket.org给出了消息:

logged in as slucha.

You can use git or hg to connect to Bitbucket. Shell access is disabled.

ssh -T deploy@45.33.95.53给出了

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.9.64-x86_64-linode88 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

1 个答案:

答案 0 :(得分:1)

问题是我在deploy.rb和production.rb之间有两个冲突的设置

确保两个文件中的设置都正确无误。 在我的production.rb中,我有以下几行:

server '53.33.95.53', user: 'deploy', roles: %w{web app}

哪个覆盖了当前的IP地址并导致超时。