Como você escreve um alias de drush para uma caixa local do Vagrant?

9

Estou tentando escrever um alias simples de drush para conectar-se a um site Drupal em execução em uma instância local do Vagrant.

Eu tenho o seguinte em um arquivo chamado ~/.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',
);

O alias foi encontrado. drush saretorna:

l
l.o

No entanto, quando eu drush @l.o statusnão conecto ao host remoto:

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   :

Confirmei que este comando se conecta com êxito ao vagrant:

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

A saída de depuração não mostra um comando SSH até onde eu sei:

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]

Eu sei que devo estar fazendo algo estúpido, mas simplesmente não consigo ver.

Justin
fonte
O que drush --debug @l.o statusmostra? O comando ssh exato deve estar oculto na saída.
mpdonadio
FWIW, eu sempre uso .ssh / config para configurar informações de conexão SSH em vez das opções de drush.
mpdonadio
Hmm, não há nenhum comando ssh de qualquer tipo na saída de depuração. Depuração adicionada acima.
21414 Justin
Outros aliases não-Vagrant, mas remotos, funcionam? A depuração que você postou mostra que ela nem tentou a conexão remota (você deve ver as linhas que começam com 'Begin redispatch via invoke process' e 'Backend invoke: ssh ...'
mpdonadio
Sim, eu tenho muitos e todos eles fazem.
Justin

Respostas:

6

Consegui usar o alias de drush com a seguinte configuração:

Vamos assumir duas coisas:

  • O vagrant box possui algum tipo de IP estático (pode ser privado, por exemplo: 192.168.56.101)

  • O IP do vagrant está disponível na forma simbólica (por exemplo, temos uma linha única em / etc / hosts com ip e nome do host). (por exemplo: test.site.local).

Etapa 1: Precisamos copiar as configurações geradas pelo comando vagrant ssh-config para $ HOME / .ssh / config

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

Etapa 2: com essa configuração, meu alias estava no seguinte formato:

$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
fonte
Esta é uma solução muito boa. Eu não especifiquei nenhuma opção ssh no meu arquivo de alias usando "vagrant ssh-config", tudo que eu precisava estava lá.
Angry Dan
Isso funcionou muito bem, embora no meu caso eu tive que raiz conjunto assim: 'root' => '/ vagabundo / docroot'
ognockocaten
Usar /dev/nullcomo arquivo conhecido de hosts resulta em um aviso toda vez que o drush é executado. Aponto HOME/.ssh/known_hosts_vagrantpara usar um arquivo separado. Então o aviso é mostrado apenas uma vez.
Tim
3

O personagem ~é expandido por Bash. O Drush não fornece esse mesmo serviço, portanto, você deve substituir ~o caminho para o diretório inicial.

Então, por exemplo:

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

Isso não foi testado, mas deve funcionar, descobrindo quaisquer erros de digitação simples.

ATUALIZAR:

Eu acho que vejo um bug Drush aqui. O Drush assumirá que o 127.0.0.1 retornará à máquina local e decidirá não usar o ssh w / out, mesmo considerando as implicações do -p no ssh-options. Isso vai exigir um patch para Drush para corrigir. function drush_is_local_host()em environment.inc .

EDIÇÃO NO GITHUB:

Por favor, coloque quaisquer comentários sobre possíveis correções na questão do Github, a chamada de back-end do Drush não considera o número da porta ao decidir local x remoto .

greg_1_anderson
fonte
Isso não deu certo. Mas eu não sabia sobre drush_server_home (). Obrigado! Estou solucionando problemas.
21414 Justin
3

Eu tenho em torno deste simplesmente fazendo um cheque de Drush no meu arquivo settings.php locais via php_sapi_name() == 'cli'e atualizar meu banco de dados e memcache seqüências de conexão para Vagrant, como este:

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

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