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.


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

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 .


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',
  );
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.