私はこれを一日中調査してきましたが、答えが見つからないようですので、ここに投稿しています。カピストラーノ マルチステージを使用して ruby on rails アプリをデプロイしていますが、デプロイが自動化されるまでは問題ありません。
これがインタラクティブに実行されるときはいつでも問題はなく、デプロイは問題なく完了します。現在、ci (Teamcity) を使用して、ビルドが成功するたびにステージング環境にデプロイすることを検討しています。
CI サーバーで、「ssh server1」または「ssh deploy@server1」を実行すると問題なく動作します。
私のciステージは次のようになり、コマンドラインからも正常に動作します
set :branch, "development"
set :rails_env, "staging"
set :user, "deploy"
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
set :rvm_ruby_string, 'ruby-1.9.2-p290'
set :rvm_bin_path, "/usr/local/rvm/bin/"
default_run_options[:pty] = true
ssh_options[:verbose] = :debug
default_run_options[:pty] = true
role :app, "server1"
role :web, "server1"
role :utility, "server2"
role :db, "server1", :primary => true
私の deploy.rb は非常に大きいですが、これらは関連する設定です
# Repo Settings
set :repository, "git@github.com:myrepo/myrepo.git"
set :scm, "git"
set :checkout, 'export'
set :copy_exclude, ".git/*"
set :deploy_via, :remote_cache
# General Settings
default_run_options[:pty] = true
set :ssh_options, { :forward_agent => true }
set :keep_releases, 20
set :use_sudo, false
Team City の下で、最終ビルド ステップとして、単純に「cap ci deploy:setup」というコマンド ライン タスクを追加しました。これは、完全なデプロイよりも簡単なテストです。
キャップログは私にこれを示しています:
[03:27:38]: [Step 4/10] D, [2011-11-21T03:27:38.103284 #22035] DEBUG -- net.ssh.authentication.session[70ca88]: allowed methods: publickey,password
[03:27:38]: [Step 4/10] E, [2011-11-21T03:27:38.103328 #22035] ERROR -- net.ssh.authentication.session[70ca88]: all authorization methods failed (tried publickey)
同じことがcronjobから発生しているようです-しかし、そこにログがありません
Teamcity とおそらく cron が完全な環境をロードしていないため、これは環境の問題のように思えます。とりわけ、sshキーをcapファイルに直接指定しようとしましたが、効果がないようです。
もう1つの奇妙な点は、デプロイしようとしているリモートサーバーで、auth.logに接続の試行が表示されないため、サーバー側からこれをトラブルシューティングすることはオプションではないようです。
だから私の質問は、どうすればこれを機能させることができますか? 問題がどこにあるかを判断するためのテストに関するアイデア、または設定する必要がある環境変数は高く評価されています。
私を解決策に導く答えはすべて受け入れられます。
ありがとう。