0

Capistrano のまったく新しい。

リモート サーバーに公開したいローカル git リポジトリがあります。ここで他の回答に従い、この構成を思いつきました:

require 'bundler/capistrano'

set :application, "app_name"
set :repository, '~/Dropbox/app/.git'
set :user, 'user_name'
set :deploy_to, 'ssh://remote_host/~/railsApps/app_name'
set :scm_verbose, true
set :deploy_via, :copy

default_run_options[:pty] = true

server "remote_server", :web, :app, :db, :primary => true

set :scm, :git
set :branch, "master"

ssh_options[:keys] = %w(~/.ssh/id_rsa)

after "deploy:restart", "deploy:cleanup"

これはリモート サーバーのパスワードを要求しなくなりましたが、常に次のエラーで失敗します。

The --deployment flag requires a Gemfile.lock. Please make sure you have checked your Gemfile.lock into version control before deploying.

私は確実に Git リポジトリに Gemfile.lock ファイルを含めています。

プッシュ先のリモート git フォルダー (同じサーバー内) から複製するように Capistrano 構成を変更すると、エラーは発生しませんが、接続しようとするたびにパスワードを要求されます。

助けてください。

CLI から通常の SSH 接続を使用すると、SSH キーのペアリングが正常に機能することに注意してください。

解決

ティグレインのおかげで解決できました。これが他の誰かを助けることを願って、これが最終的にトリックをしたものです:

パスがリモートサーバーに対してローカルであるという点でTigraineは正しいですが、ローカルパスを使用しようとするとエラーが発生しました.Capistranoはローカルマシンで検索を続け、それらのパスが見つからない場合はエラーをスローしました.

私がしなければならなかったのは、local_repositoryを構成に追加することでした。その後、すべてが機能しました。したがって、私が変更したビットは次のとおりです。

set :local_repository, '~/Dropbox/app_name/.git'
set :repository, '~/railsApps/app_name.git'
set :deploy_to, '~/railsApps/app_name'

パスは私のlocal_repositoryマシンに対してローカルでrepositoryあり、deploy_toパスはリモート サーバーに対してローカルです。

4

2 に答える 2

1

まず第一に、Capistrano は常に、デプロイ先のリモート サーバーでコマンドを実行します。これは、のように使用するすべてのパスがset :deploy_toサーバー上のローカル パスであることを意味します。

私の場合、構成は次のようになります。

set :scm, 'git'
set :repository,  "<repo url>"
set :branch, 'master'
set :git_shallow_clone, 1
set :scm_verbose, true

set :deploy_to, '/var/www/app'
set :deploy_via, :remote_cache

ここで重要な部分は、SSH パスではなく:deploy_to、サーバー上のローカル パスであることです。これはあなたの設定が間違っているところです!

capistrano が実行するコマンドを見ると、これはさらに重要になります。たとえば、通常は次のようなことを行いますbash cd /var/www/app && bundle instal ...。パスがローカルでない場合、コマンドは失敗する可能性が高くなります。

次に、これは Capistrano がリモート サーバーからGit サーバーにデプロイされることも意味するため、リモート サーバーが Git サーバーにアクセスできることを確認する必要があります。したがってssh_options[:keys]、 はその remote_server への接続に使用されるローカル SSH キーを指定しますが、サーバーではデフォルトのキー~/.ssh/id_rsa.pubが使用されます。

ssh_options[:forward_agent] = true. _ これにより、ローカルの SSH エージェント ソケットがサーバーに転送され、それが使用されます (キーがマシンから離れないため、これは良いことです)。

SSH エージェント転送の詳細については、こちらを参照してください

于 2012-06-26T13:24:34.630 に答える
0

チェックするシン:

リモート サーバーで .ssh フォルダーをチェックインし、ssh キー (id_rsa.pub) がスペースを追加せずに承認されたキーに追加されていることを確認します。

capスクリプトを実行しているローカルフォルダーからssh-addを実行します。

リモートの .ssh フォルダーのアクセス許可を確認します。これは 700 で、内部のファイルのアクセス許可は 600 である必要があります。

If I change the Capistrano configuration to clone from the remote git folder to which I push (which is in that same server) then I don't get an error but it asks for my password every time I try to connect.

gitからクローンを作成し、

于 2012-06-26T13:50:12.833 に答える