¿Cómo se escribe un alias drush para un cuadro Vagabundo local?

9

Estoy tratando de escribir un simple alias drush para conectarme a un sitio de Drupal que se ejecuta en una instancia local de Vagrant.

Tengo lo siguiente en un archivo llamado ~/.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',
);

Se encuentra el alias. drush sadevoluciones:

l
l.o

Sin embargo, cuando drush @l.o statusno se conecta al 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   :

He confirmado que este comando se conecta con éxito a vagabundo:

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

La salida de depuración no muestra un comando SSH hasta donde puedo decir:

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]

Sé que debo estar haciendo algo estúpido, pero no puedo verlo.

Justin
fuente
¿Qué drush --debug @l.o statusmuestra? El comando ssh exacto debe estar enterrado en la salida.
mpdonadio
FWIW, siempre uso .ssh / config para configurar la información de conexión SSH en lugar de las opciones drush.
mpdonadio
Hmm, no hay ningún comando ssh de ningún tipo en la salida de depuración. Depuración agregada anteriormente.
Justin
¿Funcionan otros alias no vagabundos, pero remotos? La depuración que publicó muestra que ni siquiera intentó la conexión remota (debería ver líneas que comienzan 'Comenzar redistribución mediante proceso de invocación' e 'Invocación de fondo: ssh ...'
mpdonadio
Sí, tengo muchos y todos los tienen.
Justin

Respuestas:

6

Pude usar drush alias con la siguiente configuración:

Asumamos dos cosas:

  • La caja vagabunda tiene algún tipo de IP estática (puede ser privada, por ejemplo: 192.168.56.101)

  • IP de vagabundo está disponible en forma simbólica (por ejemplo, tenemos una sola línea en / etc / hosts con ip y nombre de host). (por ejemplo: test.site.local).

Paso 1: Necesitamos copiar la configuración, generada por el comando vagabundo ssh-config en $ HOME / .ssh / config

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

Paso 2: Con tal configuración, mi alias estaba en la siguiente forma:

$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
fuente
Esta es una muy buena solución. No especifiqué ninguna opción ssh en mi archivo de alias después de haber usado "ssh-config vagabundo", todo lo que necesitaba estaba allí.
Dan enojado
Esto funcionó bien, aunque en mi caso tuve que establecer la raíz de esta manera: 'root' => '/ vagrant / docroot'
ognockocaten
Utilizar /dev/nullcomo el archivo de hosts conocido da como resultado una advertencia cada vez que se ejecuta drush. Le señalo que HOME/.ssh/known_hosts_vagrantuse un archivo separado. Entonces la advertencia solo se muestra una vez.
Tim
3

El personaje ~es expandido por Bash. Drush no proporciona este mismo servicio, por lo que debe reemplazarlo ~con la ruta a su directorio de inicio.

Así por ejemplo:

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

Eso no se ha probado, pero debería funcionar, dejando al descubierto cualquier error tipográfico simple.

ACTUALIZAR:

Creo que veo un error Drush aquí. Drush asumirá que 127.0.0.1 volverá a la máquina local, y decidirá no usar ssh w / out incluso teniendo en cuenta las implicaciones de -p en ssh-options. Esto requerirá un parche para que Drush lo arregle. function drush_is_local_host()en ambiente.inc .

NÚMERO EN GITHUB:

Ponga cualquier comentario sobre posibles soluciones en el problema de Github, la invocación de backend de Drush no considera el número de puerto al decidir local versus remoto .

greg_1_anderson
fuente
Eso no funcionó. Pero no sabía sobre drush_server_home (). ¡Gracias! Estoy solucionando problemas.
Justin
3

Resolví esto simplemente haciendo una comprobación de Drush en mi archivo settings.php local a través de php_sapi_name() == 'cli'y actualizando mi base de datos y cadenas de conexión de memcache a Vagrant, de esta manera:

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

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