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ę.


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"
);

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 .


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',
  );
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.