2016-04-27 9 views
1

Bereitstellung Ich habe folgendes Setup in meinem deploy.rbMittel SSH Forwarding mit Capistrano 3 nicht arbeiten, wenn Rails-Anwendung

set :application, 'sample_app' 
set :repo_url, '[email protected]:/home/user/railsapps/sample_app' 
set :deploy_to, '/var/www/sample_app' 
set :user, "user" 
set :ssh_options, { :forward_agent => true } 

und meine deploy/production.rb Datei:

set :stage, :production 
server '123.45.67.200', user: 'user', roles: %w{app db web} 

ich der folgende Fehler, wenn ich cap production deploy ausführen: überprüfen

DEBUG [] ssh: connect to host 123.45.67.100 port 22: Connection timed out 
DEBUG [] fatal: Could not read from remote repository. 
Please make sure you have the correct access rights and the repository exists. 
(Backtrace restricted to imported tasks) 
cap aborted! 
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: git exit status: 128 
git stdout: Nothing written 
git stderr: ssh: connect to host 123.45.67.200 port 22: Connection timed out 
fatal: Could not read from remote repository. 
Please make sure you have the correct access rights and the repository exists. 

In einer der Zeilen, sehe ich, dass es versucht, auf das Repository zugreifen als [email protected], die die Bereitstellung Benutzer für den Produktionsserver ist:

INFO [] Running /usr/bin/env git ls-remote --heads [email protected]:/home/user/railsapps/sample_app as [email protected] 

Sollte es nicht sagen, dass es mit den lokalen SSH-Schlüssel wie der lokale Benutzer-Anschluss? Registriert Capistrano sich auf dem Produktionsserver und zieht dann Code aus dem Repository? Wenn ja, gibt es eine Möglichkeit, Code vom Repository auf den Produktionsserver zu übertragen?

+0

Capistrano funktioniert durch Ziehen des aktualisierten Codes. Es meldet sich auf dem Produktionsserver an und macht von dort aus einen Git-Pull. Wenn Sie Schlüssel weiterleiten, ist der lokale Schlüssel verfügbar. Überprüfen Sie jedoch, ob Sie den Repo als Bereitstellungsbenutzer klonen können –

Antwort

0

Capistrano wird sich beim Server anmelden und dann vom Server den Code von Ihrem VCS herunterziehen.

Es gibt in der Regel zwei Möglichkeiten zur Authentifizierung dieser:

  1. ssh-agent-Weiterleitung, die die Remote-Sitzung Zugriff auf Ihre Entwicklerschlüssel geben, oder
  2. deploy Schlüssel, die der Serverbenutzer Schlüssel Zugang geben wird dein Code.

Die zweite Hälfte dieser Dokumentation Seite beschreibt die Art und Weise Git mit Capistrano funktioniert: http://capistranorb.com/documentation/getting-started/cold-start/

Von den Fehler, die Sie gebucht haben, müssen Sie wahrscheinlich die eine oder andere der oben genannten Optionen einrichten.

0

Es scheint, dass Ihre Git-URL nicht gültig ist. Sie können dies testen, indem Sie eine Verbindung zum entfernten System herstellen ([email protected]) und versuchen, den Remote-Git-Repo mit einem einfachen git ls-remote --heads zu treffen, der die Konnektivität beweisen wird.

git ls-remote --heads [email protected]:/home/user/railsapps/sample_app 

Ich vermute, dass Sie .git auf Ihre URL angehängt Möglicherweise müssen ([email protected]:/home/user/railsapps/sample_app.git), aber das hängt wirklich davon ab, wie Sie Ihre Remote-Repo eingerichtet haben.

Git verwendet SSH zum Verbinden, aber es zeigt dies nicht explizit in der Capistrano-Ausgabe. Alles, was Sie sehen werden, sind die expliziten git Befehle.

Alternativ, wenn Sie erwarten, Agentenweiterleitung zu verwenden, dann möglicherweise ein Problem mit Ihrer SSH-Weiterleitungskonfiguration, entweder lokal oder remote. Sie können dies testen, indem Sie Ihren lokalen Computer überprüfen und dann eine Verbindung zu einem Remote-Computer herstellen und überprüfen, ob Ihre Identität weitergeleitet wurde.Das würdest du tun, wie folgt:

local-host$ ssh-add -l 
local-host$ ssh [email protected] 
remote-host$ ssh-add -l 

Wenn Sie eine Ausgabe wie:

Error connecting to agent: No such file or directory 

oder:

Could not open a connection to your authentication agent. 

oder:

The agent has no identities. 

Dann müssen Sie sortieren Dieses Problem vor Capistrano wird wie erwartet funktionieren.

Sie können dies schreiben "Using ssh-agent with ssh", um mit SSH-Konfiguration zu helfen.