質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

railsデプロイ時に「SSHKit::Runner::ExecuteError:」というエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,096

k.tachi

score 4

 前提・実現したいこと

当方初心者です。
railsでアプリを作成中で、以下のサイトを参考にデプロイを試みています。
https://pierrot-space.com/2017/03/05/post-1062/

環境は上記サイトとほぼ同じで、
・ruby 2.3.0
・ruby on rails 5.1.4
・PC windows
・仮想開発環境 VirturlBos + Vagrant + centos7
・本番環境 さくらVPS
・MariaDB
・Nginx
・Unicorn
・Capistrano
・bitbucket
です。

上記サイトの手順通りに進め、
下記ページ
https://pierrot-space.com/2017/03/18/post-1117/
最終部分の

$ export RAILS_ENV=production
$ cap production deploy:upload


を実行したところ、
以下のようなエラーメッセージが表示されてしまいます。

 発生している問題・エラーメッセージ

[vagrant@localhost ****]$ cap production deploy:upload
[Deprecation Notice] `set :scm, :git` is deprecated.
To ensure your project is compatible with future versions of Capistrano,
remove the :scm setting and instead add these lines to your Capfile after
`require "capistrano/deploy"`:

    require "capistrano/scm/git"
    install_plugin Capistrano::SCM::Git

(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as ***@***.**.***.***: Net::SSH::ConnectionTimeout


Caused by:
Net::SSH::ConnectionTimeout: Net::SSH::ConnectionTimeout


Caused by:
Errno::ETIMEDOUT: Connection timed out - connect(2) for ***.**.***.***:22

Tasks: TOP => rbenv:validate
(See full trace by running task with --trace)

 該当のソースコード

関係がありそうなファイルのソースを記載します。

config/deploy/production.rb

set :stage, :production
set :branch, 'master'

role :app, %w{***@***.**.***.***}
role :web, %w{***@***.**.***.***}
role :db, %w{***@***.**.***.***}

set :ssh_options, {
  keys: [File.expand_path('~/.ssh/insecure_private_key')],
  forward_agent: true,
  auth_methods: %w(publickey)
}

config/deploy.rb

# config valid for current version and patch releases of Capistrano
lock "~> 3.10.1"

set :application, "***"
set :repo_url, "git@bitbucket.org:***/memome.git"

set :deploy_to, '/var/www/app/***'

set :branch, 'master'
set :default_stage, "development"
set :scm, :git
set :deploy_via, :remote_cache

set :log_level, :debug
set :pty, true # sudo に必要
set :bundle_binstubs, nil

# Shared に入るものを指定
set :linked_files, %w{config/database.yml config/secrets.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/assets}

# Unicorn
set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"

# 5回分のreleasesを保持する
set :keep_releases, 5

after 'deploy:publishing', 'deploy:restart'
namespace :deploy do
  # アプリの再起動を行うタスク
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :mkdir, '-p', release_path.join('tmp')
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  # linked_files で使用するファイルをアップロードするタスク
  # deployが行われる前に実行する必要がある。
  desc 'upload important files'
  task :upload do
    on roles(:app) do |host|
      execute :mkdir, '-p', "#{shared_path}/config"
      upload!('config/database.yml',"#{shared_path}/config/database.yml")
      upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml")
    end
  end

  # webサーバー再起動時にキャッシュを削除する
  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      within release_path do
        execute :rm, '-rf', release_path.join('tmp/cache')
      end
    end
  end

  # Flow の before, after のタイミングで上記タスクを実行
  before :started, 'deploy:upload'
  after :finishing, 'deploy:cleanup'

  # Unicorn 再起動タスク
  desc 'Restart application'
  task :restart do
    invoke 'unicorn:restart' # lib/capustrano/tasks/unicorn.cap 内処理を実行
  end
end


※「*」部分は、自分の環境に書き換えている部分です。

 試したこと

エラーメッセージの最後に、

Caused by:
Errno::ETIMEDOUT: Connection timed out - connect(2) for ***.**.***.***:22


と「:22」が記載されていますが、
サーバー側のSSH接続ポートを別の値に変更しているので、そのあたりが原因なのかとも思いますが、
上記のエラーどこの記述が原因で「:22」となっているのかもわからず…。

そもそも、上記のポート以外の問題以外が原因なのかもしれませんが、
何か基本的なところで間違っているような気もするのですが、
当方初心者につき、原因および解決方法がわからずご質問させていただいた次第です。

解決にあたり不足している情報などがあれば追記いたしましのでご指摘ください。

よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

config\deploy\production.rb を以下のように書き換えることで解決しました。

set :ssh_options, {
  port: XXX, #XXXにポート番号
  keys: [File.expand_path('~/.ssh/id_rsa')], #'~/.ssh/id_rsa'部分をローカル環境の鍵のパスに
  forward_agent: true,
  auth_methods: %w(publickey)
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る