Wie schreibt man einen Drush-Alias ​​für eine lokale Vagrant-Box?

9

Ich versuche, einen einfachen Drush-Alias ​​zu schreiben, um eine Verbindung zu einer Drupal-Site herzustellen, die auf einer lokalen Vagrant-Instanz ausgeführt wird.

Ich habe Folgendes in einer Datei namens ~/.drush/l.aliases.drushrc.php:

$aliases['o'] = array(
  'parent' => 'l',
  'root' => '/vagrant/docroot',
  'remote-host' => '127.0.0.1',
  'remote-user' => 'vagrant',
  'ssh-options' => '-p 2222 -i ~/.vagrant.d/insecure_private_key',
  'uri' => '127.0.0.1:8080',
);

Der Alias ​​wird gefunden. drush sakehrt zurück:

l
l.o

Allerdings, wenn ich drush @l.o statuses keine Verbindung zu der Remote - Host:

PHP executable        :  /usr/local/bin/php
PHP configuration     :  /usr/local/etc/php/5.3/php.ini
PHP OS                :  Darwin
Drush version         :  6.1.0
Drush configuration   :

Ich habe bestätigt, dass dieser Befehl erfolgreich eine Verbindung zu Vagrant herstellt:

ssh vagrant@127.0.0.1 -p 2222 -i ~/.vagrant.d/insecure_private_key

Das Debuggen der Ausgabe zeigt keinen SSH-Befehl an, soweit ich das beurteilen kann:

SIG-106:ilob justin$ drush --debug @l.o status
Bootstrap to phase 0. [0 sec, 3.78 MB]                               [bootstrap]
Drush bootstrap phase : _drush_bootstrap_drush() [0.01 sec, 3.98 MB] [bootstrap]
Loaded alias @l.o from file /Users/justin/.drush/l.aliases.drushrc.php [0.01 sec, 3.99 MB]                                                                        [notice]
Cache MISS cid: 6.1.0-commandfiles-0-807b6772846e18b2741e8d5b7119b4cc [0.01 sec, 4 MB]                                                                             [debug]
Cache SET cid: 6.1.0-commandfiles-0-807b6772846e18b2741e8d5b7119b4cc [0.01 sec, 4.02 MB]                                                                           [debug]
Bootstrap to phase 0. [0.05 sec, 9.56 MB]                                                                                                                      [bootstrap]
Found command: core-status (commandfile=core) [0.08 sec, 9.56 MB]                                                                                              [bootstrap]
Loading outputformat engine. [0.13 sec, 9.6 MB]                                                                                                                   [notice]
Calling hook drush_core_status [0.14 sec, 9.65 MB]                                                                                                                 [debug]
Returned from hook drush_core_status [0.14 sec, 9.66 MB]

Ich weiß, dass ich etwas Dummes tun muss, aber ich kann es einfach nicht sehen.

Justin
quelle
Was drush --debug @l.o statuszeigt? Der genaue Befehl ssh sollte in der Ausgabe vergraben sein.
mpdonadio
FWIW, ich verwende immer .ssh / config zum Einrichten von SSH-Verbindungsinformationen anstelle der Drush-Optionen.
mpdonadio
Hmm, es gibt keinen ssh-Befehl in der Debug-Ausgabe. Debug oben hinzugefügt.
Justin
Funktionieren andere nicht-vagabundierende, aber entfernte Aliase? Das von Ihnen gepostete Debug zeigt, dass nicht einmal versucht wurde, die Remoteverbindung herzustellen (Sie sollten Zeilen sehen, die mit "Redispatch über Aufrufprozess beginnen" und "Backend-Aufruf: ssh ..." beginnen
mpdonadio
Ja, ich habe viele und sie alle tun es.
Justin

Antworten:

6

Ich konnte Drush-Alias ​​mit folgender Konfiguration verwenden:

Nehmen wir zwei Dinge an:

  • Vagrant Box hat eine Art statische IP (kann privat sein, zum Beispiel: 192.168.56.101)

  • Die IP von vagrant ist in symbolischer Form verfügbar (zum Beispiel haben wir eine einzelne Zeile in / etc / hosts mit IP und Hostname). (zum Beispiel: test.site.local).

Schritt 1: Wir müssen Einstellungen, die mit dem Befehl vagrant ssh-config generiert wurden, in $ HOME / .ssh / config kopieren

Host test.site.local
    IdentitiesOnly yes
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentityFile [path to vagrant private insecure key]

Schritt 2: Bei einer solchen Konfiguration hatte mein Alias ​​folgende Form:

$aliases['example'] = array(
   'root' => '/var/www',
   'uri' => 'test.site.local',
   'remote-host' => 'test.site.local',
   'remote-user' => 'vagrant',
   'ssh-options' => "-i path_to_insecure_private_key"
);
Harijari
quelle
Dies ist eine wirklich schöne Lösung. Ich habe in meiner Alias-Datei keine ssh-Optionen angegeben, da ich "vagrant ssh-config" verwendet habe. Alles, was ich brauchte, war da.
Angry Dan
Dies funktionierte gut, obwohl ich in meinem Fall root wie folgt setzen musste: 'root' => '/ vagrant / docroot'
ognockocaten
Die Verwendung /dev/nullals bekannte Hosts-Datei führt bei jeder Ausführung von drush zu einer Warnung. Ich weise darauf hin HOME/.ssh/known_hosts_vagrant, eine separate Datei zu verwenden. Dann wird die Warnung nur einmal angezeigt.
Tim
3

Der Charakter ~wird von Bash erweitert. Drush bietet nicht denselben Dienst an, daher sollten Sie ihn durch ~den Pfad zu Ihrem Home-Verzeichnis ersetzen .

Also zum Beispiel:

$home = drush_server_home();
$aliases['o'] = array(
  'parent' => 'l',
  'root' => '/vagrant/docroot',
  'remote-host' => '127.0.0.1',
  'remote-user' => 'vagrant',
  'ssh-options' => "-p 2222 -i $home/.vagrant.d/insecure_private_key",
  'uri' => '127.0.0.1:8080',
);

Das ist ungetestet, aber es sollte funktionieren, ohne einfache Tippfehler.

AKTUALISIEREN:

Ich glaube, ich sehe hier einen Drush-Bug. Drush geht davon aus, dass 127.0.0.1 auf den lokalen Computer zurückkehrt, und beschließt, ssh w / out nicht zu verwenden, selbst wenn die Auswirkungen von -p in ssh-Optionen berücksichtigt werden. Dies erfordert einen Patch für Drush, um das Problem zu beheben. function drush_is_local_host()in environment.inc .

AUSGABE ZU GITHUB:

Bitte geben Sie Kommentare zu möglichen Korrekturen in das Github-Problem ein. Beim Drush-Backend-Aufruf wird die Portnummer bei der Entscheidung zwischen lokal und remote nicht berücksichtigt .

greg_1_anderson
quelle
Das hat nicht funktioniert. Aber ich wusste nichts über drush_server_home (). Vielen Dank! Ich behebe Fehler.
Justin
2
vgl. github.com/drush-ops/drush/pull/546
greg_1_anderson
3

Ich habe um diese einfach einen Scheck für Drush in meinem tun lokalen settings.php Datei über php_sapi_name() == 'cli'und meine Datenbank aktualisiert und memcache Verbindungszeichenfolgen zu Vagrant, wie folgt aus :

if (php_sapi_name() == 'cli') {
  $databases['default']['default']['port'] = '3307';

  $conf['memcache_servers'] = array(
    '127.0.0.1:11212' => 'default',
  );
}
Justin
quelle