2012-06-26 24 views
0

完全新的Capistrano。Capistrano本地git存儲庫克隆到遠程請求密碼儘管SSH密鑰

我有我想要發佈到我的遠程服務器的本地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文件。

如果我將Capistrano配置從我推送到的遠程git文件夾(在同一服務器上)克隆,那麼我不會收到錯誤,但每次嘗試連接時都會要求輸入密碼。

請幫忙。

注意 SSH密鑰配對在從常規SSH連接的CLI中使用時工作正常。

解決方案

感謝Tigraine我能解決這個問題。希望這可以幫助別人,這裏是最後的伎倆:

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路徑是本地的我的機器和repositorydeploy_to路徑是本地到遠程服務器。

回答

1

首先:Capistrano總是執行它的命令on您要部署到的遠程服務器。 這意味着您在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 

這裏最重要的部分是:deploy_to是服務器不是SSH路徑上的本地路徑。 這是你的配置錯誤的地方

如果您查看capistrano運行的命令,這會變得更加重要。它通常會做例如bash cd /var/www/app && bundle instal ...。 如果路徑不是本地的,那麼命令很可能會失敗。

其次這也意味着Capistrano將從您的遠程服務器部署到您的Git服務器,因此您必須確保遠程服務器有權訪問Git服務器。 因此,ssh_options[:keys]指定用於連接到該remote_server的本地SSH密鑰,而在服務器上將使用來自~/.ssh/id_rsa.pub的默認密鑰。

您可以避免必須使用SSH代理轉發(包括ssh_options[:forward_agent] = true)在服務器上設置SSH密鑰。這隻會向前本地SSH代理套接字服務器,並使用(好,因爲你的密鑰永遠不會離開你的機器)

SSH的代理更多信息轉發可以發現here

+0

我曾嘗試SSH轉發並沒有什麼區別。但請注意,它現在似乎工作,因爲它現在配置,只是我得到一個錯誤的Gemfile.lock文件不存在。 – kakubei

+0

您是否嘗試在本地運行bundler以查看Gemfile.lock是否是最新的? – Tigraine

+0

是的,同樣的問題。我願意重寫配置,以便它能夠從服務器本身的repo文件夾中部署,如果我能弄清楚如何去做。哪一個是首選? – kakubei

0

變薄檢查:

檢入遠程服務器中的.ssh文件夾,並確保將ssh密鑰(id_rsa.pub)添加到授權密鑰中,且不添加任何空格。

做你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. 

現在克隆其從混帳,

+0

ssh密鑰配對工作正常,我可以從CLI使用標準SSH無障礙地登錄。對不起,-1我試圖擺脫一個意外的+1,我應該已經解釋了SSH密鑰配對在我原來的帖子中工作正常的事實。 – kakubei

+0

只是檢查是否有任何覆蓋部署腳本憑證的config/deploy/staging.rb或production.rb或development.rb文件。 – Bijendra

相關問題