2

以前に機能していたプロジェクトを開発サーバーにデプロイしようとすると、少し問題が発生します。私はシステムをセットアップしませんでしたが、必要なすべての資格情報を持っています(私は思います)。

cap staging deployを試した後、これまでのところ取得しましたが、エラーが発生します。下記を参照してください:

triggering load callbacks
  * 2012-11-20 14:52:20 executing `staging'
    triggering start callbacks for `deploy'
  * 2012-11-20 14:52:20 executing `multistage:ensure'
Identity added: /Users/XXX/.ssh/id_rsa (/Users/XXX/.ssh/id_rsa)
  * 2012-11-20 14:52:20 executing `deploy'
  * 2012-11-20 14:52:20 executing `deploy:update'
 ** transaction: start
  * 2012-11-20 14:52:20 executing `deploy:update_code'
    executing locally: "git ls-remote ssh://gitolite@repo1:2011/proto_projectname_rails HEAD"
    command finished in 2864ms
  * executing "git clone -q ssh://gitolite@repo1:2011/proto_projectname_rails /var/www/projectname/releases/20121120145223 && cd /var/www/projectname/releases/20121120145223 && git checkout -q -b deploy 0598169ed07015279bd78efa91f25ed3e5edcad8 && (echo 0598169ed07015279bd78efa91f25ed3e5edcad8 > /var/www/projectname/releases/20121120145223/REVISION)"
    servers: ["repo2"]
*** [deploy:update_code] rolling back
  * executing "rm -rf /var/www/projectname/releases/20121120145223; true"
    servers: ["repo2"]
 ** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: repo2 (Errno::ECONNREFUSED: Connection refused - connect(2))
connection failed for: repo2 (Errno::ECONNREFUSED: Connection refused - connect(2))

deploy.rb

set :stages, %w(staging production)
set :default_stage, "production"
require 'capistrano/ext/multistage'

set :application, "projectname"

set :scm, :git
set :repository,  "ssh://gitolite@repo1:2011/proto_projectname_rails"

以前は機能していたバージョンが機能しなくなった理由について、正直に混乱しています。

ヘルプ、アドバイス、ガイダンス、またはこの問題は大歓迎です。

ありがとうございました

ちなみに、はい、それは常に2011年の非標準ポートであり、私の.ssh/configにあります。

編集:

このプロセスには2台のサーバーが関係しています。

以下をローカルおよび2番目のサーバーで実行した後、応答があります。

git ls-remote ssh://gitolite@repo1:2011/proto_projectname_rails

戻ります。

0598169ed07015279bd78efa91f25ed3e5edcad8    HEAD
0598169ed07015279bd78efa91f25ed3e5edcad8    refs/heads/master

編集:2台のサーバーで実行されます。Repo1とRepo2

cap deploy:check

戻り値

   triggering load callbacks
 * 2012-11-27 21:02:36 executing `production'
 triggering start callbacks for `deploy:check'
 * 2012-11-27 21:02:36 executing `multistage:ensure'
  Identity added: /Users/x/.ssh/id_rsa (/Users/x/.ssh/id_rsa)
 * 2012-11-27 21:02:36 executing `deploy:check'
 * executing "test -d /var/www/projectname/releases"
   servers: ["repo2"]
   connection failed for: repo2 (Errno::ECONNREFUSED: Connection refused - connect(2))

解決しました

2番目のサーバーのポート番号が原因で拒否されていたことが判明しました。追加する

set :port, 1893

賞金は、これを説明できる人なら誰でもまだ開いています。

ssh / configをいつでも編集せずに、常にサーバーにSSHで接続でき、他のマシンでもまったく同じデプロイファイルとステージングファイルでデプロイできたのに、ポート番号を明示的に追加するまでできなかったのはなぜですか?

4

1 に答える 1

2

この質問に対する最終的な回答については、以下の更新2を参照してください。

OK、最初にテストするのは、ローカルコンピューターから実行できるかどうかですgit ls-remote ssh://gitolite@XXX:2011。リポジトリから参照のリストを返す必要があります。これが機能しない場合は、おそらく同様のエラー(接続が拒否されたか同様)が発生するはずです。次に、gitリポジトリをホストしている人から理由を理解する必要があります。

ローカルで機能する場合は、デプロイ中にgitにアクセスする方法に応じて、これらのオプションの一部またはすべてを設定する必要があります。デプロイサーバー/ユーザーがリポジトリに直接ログインできない限り、forward_agentオプションが必要だと思います。

set :deploy_via, :remote_cache
default_run_options[:pty] = true
ssh_options[:forward_agent] = true

そして私はこの他のスタックオーバーフローの答えでそれを設定する方法を説明しました。

capistranoについて覚えておくべき重要なことは、ほとんどのコマンドは実際には単なる標準のシェルコマンドですが、のようにsshを使用してリモートサーバーに渡されるssh user@server.example.com <command>ため、これが機能しないかどうかをテストする別のことです。

元の質問に追加された情報に基づいて更新します。

URLを使用してサーバーにTCP接続する場合は、プロトコル、ホストアドレス、およびポート番号を指定します。多くのプロトコルでは、ポート番号が暗示されています。たとえばssh://1.2.3.4、標準ポートが22のプロトコルSSHを指定しているため、と同じになりssh://1.2.3.4:22ます。gitプロバイダーは、リクエストをルーティングするために、異なるリポジトリ(おそらく同じIPアドレス上)に異なるポートを割り当てていると思います。そのため、リポジトリごとに異なるポート番号を使用している可能性があります。使用されているsshプロトコルのデフォルトのポートではないため、URLの一部として指定する必要があります(これは、capistranoでを使用してオーバーライドできるようですset :port)。

repo1同じプロジェクトに複数のgitリポジトリ(と)があることは私には意味がないrepo2ので、おそらくこれがどのような場合に発生するかを理解する必要がありますが、いずれの場合でも、エラーの理由はサーバーが作成できなかったためです指定されたURLを指定したgitホストへのTCP接続。

Update 2 OK、それでそれrepo1はgitリポジトリであることがわかります。非標準のSSHポート(2011)でホストされているため、gitサーバーのssh URLを参照する場合は常に、これをURLに埋め込む必要があります。

ただし、repo2実際にはRailsアプリ(gitリポジトリと同じソースでホストされている)を実行するアプリケーションサーバーであり、非標準のsshポート( )でも1893使用できます。このサーバーにSSHでssh -p 1893 ...接続するには、-を使用してポートを指定する必要があります。これがcapistranoの接続方法であるため、これも同様です。set :port, 1893これが、の追加が必要な理由です。

于 2012-11-20T18:51:55.073 に答える