Jak napisać alias drush dla lokalnej skrzynki Vagrant?

9

Próbuję napisać prosty alias drush, aby połączyć się z witryną Drupal działającą na lokalnej instancji Vagrant.

Mam w pliku o nazwie ~/.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',
);

Alias ​​został znaleziony. drush sazwroty:

l
l.o

Kiedy drush @l.o statusjednak nie łączę się ze zdalnym hostem:

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   :

Potwierdziłem, że to polecenie pomyślnie łączy się z włóczęgą:

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

Debugowanie danych wyjściowych nie pokazuje polecenia SSH, o ile mogę powiedzieć:

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]

Wiem, że muszę robić coś głupiego, ale po prostu tego nie widzę.

Justin
źródło
Co drush --debug @l.o statuspokazuje Dokładne polecenie ssh powinno być zakopane w wyjściu.
mpdonadio
FWIW, zawsze używam .ssh / config do konfigurowania informacji o połączeniu SSH zamiast opcji drush.
mpdonadio
Hmm, w wyjściu debugowania nie ma żadnego polecenia ssh. Debugowanie dodane powyżej.
Justin
Czy działają aliasy inne niż włóczęgowskie, ale odległe? Debiut, który opublikowałeś, pokazuje, że nawet nie próbował nawiązać połączenia zdalnego (powinieneś zobaczyć linie zaczynające się od „Rozpocznij redispatch poprzez proces invoke” i „Backend invoke: ssh ...”
mpdonadio
Tak, mam ich wiele, a oni wszyscy mają.
Justin

Odpowiedzi:

6

Mogłem używać aliasu drush w następującej konfiguracji:

Załóżmy dwie rzeczy:

  • vagrant box ma jakiś statyczny adres IP (może być prywatny, na przykład: 192.168.56.101)

  • Adres IP włóczęgi jest dostępny w formie symbolicznej (na przykład mamy pojedynczy wiersz w / etc / hosts z ip i nazwą hosta). (na przykład: test.site.local).

Krok 1: Musimy skopiować ustawienia wygenerowane przez błędną komendę ssh-config do $ HOME / .ssh / config

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

Krok 2: Przy takiej konfiguracji mój alias był w następującej formie:

$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
źródło
To naprawdę miłe rozwiązanie. Nie określiłem żadnych opcji ssh w moim pliku aliasu po użyciu „vagrant ssh-config”, wszystko, czego potrzebowałem, tam było.
Wściekły Dan
Działa to ładnie, chociaż w moim przypadku musiałem tak ustawić root: 'root' => '/ vagrant / docroot'
ognockocaten
Użycie /dev/nulljako pliku znanego hosta powoduje wyświetlenie ostrzeżenia przy każdym uruchomieniu drush. Wskazuję, HOME/.ssh/known_hosts_vagrantaby użyć osobnego pliku. Następnie ostrzeżenie jest wyświetlane tylko raz.
Tim
3

Postać ~jest rozwijana przez Bash. Drush nie zapewnia tej samej usługi, dlatego należy zastąpić ~ją ścieżką do katalogu domowego.

Na przykład:

$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',
);

To nie zostało przetestowane, ale powinno działać, z wyjątkiem prostych literówek.

AKTUALIZACJA:

Myślę, że widzę tutaj błąd Drusha. Drush zakłada, że ​​127.0.0.1 wraca do komputera lokalnego i zdecyduje się nie używać ssh w / out, nawet biorąc pod uwagę implikacje -p w opcjach ssh. Będzie to wymagało poprawki do Drusha do naprawy. function drush_is_local_host()w environment.inc .

WYDANIE NA GITHUBIE:

Proszę wstawić wszelkie uwagi dotyczące potencjalnych poprawek w problemie Github, wywołanie backendu Drusha nie bierze pod uwagę numeru portu przy podejmowaniu decyzji o lokalnym lub zdalnym .

greg_1_anderson
źródło
To nie zadziałało. Ale nie wiedziałem o drush_server_home (). Dzięki! Rozwiązuję problemy.
Justin
3

Mam wokół to po prostu robi czek na Drush w moim lokalnym pliku settings.php poprzez php_sapi_name() == 'cli'i aktualizowania mojej bazy danych i memcache ciągi połączeń do Vagrant coś takiego:

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

  $conf['memcache_servers'] = array(
    '127.0.0.1:11212' => 'default',
  );
}
Justin
źródło