Come si scrive un alias di droga per un box Vagrant locale?


9

Sto cercando di scrivere un semplice alias drush per connettermi a un sito Drupal in esecuzione su un'istanza locale di Vagrant.

Ho il seguente in un file chiamato ~/.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',
);

L'alias è stato trovato. drush saritorna:

l
l.o

Tuttavia, quando I drush @l.o statusnon si connette all'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   :

Ho confermato che questo comando si collega correttamente a Vagrant:

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

L'output di debug non mostra un comando SSH per quanto ne so:

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]

So che devo fare qualcosa di stupido ma non riesco proprio a vederlo.


Cosa drush --debug @l.o statusmostra? L'esatto comando ssh dovrebbe essere sepolto nell'output.
mpdonadio

FWIW, utilizzo sempre .ssh / config per impostare le informazioni di connessione SSH invece delle opzioni di trascinamento.
mpdonadio

Hmm, non c'è alcun comando ssh di alcun tipo nell'output di debug. Debug aggiunto sopra.
Giustino,

Funzionano altri alias non vaganti, ma remoti? Il debug che hai pubblicato mostra che non ha nemmeno tentato la connessione remota (dovresti vedere le righe che iniziano 'Inizia ridispatch tramite invoke process' e 'Backend invoke: ssh ...'
mpdonadio

Sì, ne ho molti e tutti lo fanno.
Giustino,

Risposte:


6

Sono stato in grado di utilizzare drias alias con la seguente configurazione:

Supponiamo due cose:

  • la scatola del vagabondo ha una sorta di ip statico (può essere privato, ad esempio: 192.168.56.101)

  • IP of vagrant è disponibile in forma simbolica (ad esempio, abbiamo una riga singola in / etc / hosts con ip e nome host). (ad esempio: test.site.local).

Passaggio 1: dobbiamo copiare le impostazioni, generate dal comando vagrant ssh-config in $ HOME / .ssh / config

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

Passaggio 2: con tale configurazione, il mio alias era nella seguente 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"
);

Questa è davvero una bella soluzione. Non ho specificato alcuna opzione ssh nel mio file alias dopo aver usato "vagrant ssh-config", tutto ciò di cui avevo bisogno era lì.
Angry Dan,

Questo ha funzionato bene, anche se nel mio caso ho dovuto impostare root in questo modo: 'root' => '/ vagrant / docroot'
ognockocaten,

L'utilizzo /dev/nullcome file host noto genera un avviso ogni volta che viene eseguito drush. Lo indico HOME/.ssh/known_hosts_vagranta utilizzare un file separato. Quindi l'avviso viene visualizzato solo una volta.
Tim

3

Il personaggio ~è espanso da Bash. Drush non fornisce questo stesso servizio, quindi è necessario sostituirlo ~con il percorso della directory principale.

Quindi, per esempio:

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

Questo non è testato, ma dovrebbe funzionare, escludendo qualsiasi semplice errore di battitura.

AGGIORNARE:

Penso di vedere un bug Drush qui. Drush supporrà che 127.0.0.1 tornerà al computer locale e deciderà di non usare ssh w / out anche considerando le implicazioni di -p in ssh-options. Ciò richiederà una patch per Drush da correggere. function drush_is_local_host()in environment.inc .

EMISSIONE SU GITHUB:

Inserisci eventuali commenti relativi a potenziali correzioni nel problema di Github, invocare il backend Drush non considera il numero di porta quando si decide locale o remoto .


Non ha funzionato. Ma non sapevo di drush_server_home (). Grazie! Sto risolvendo i problemi.
Giustino,


3

Ho aggirato questo semplicemente facendo un controllo per Drush nel mio file settings.php locale tramite php_sapi_name() == 'cli'e aggiornando il mio database e le stringhe di connessione memcache a Vagrant, in questo modo:

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

  $conf['memcache_servers'] = array(
    '127.0.0.1:11212' => 'default',
  );
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.