J'essaie d'écrire un alias de drush simple pour me connecter à un site Drupal fonctionnant sur une instance locale de Vagrant.
J'ai ce qui suit dans un fichier appelé ~/.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 est trouvé. drush sa
Retour:
l
l.o
Cependant, quand je drush @l.o status
il ne se connecte pas à l'hôte distant:
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 :
J'ai confirmé que cette commande se connecte avec succès à vagabond:
ssh [email protected] -p 2222 -i ~/.vagrant.d/insecure_private_key
La sortie de débogage n'affiche pas de commande SSH pour autant que je sache:
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]
Je sais que je dois faire quelque chose de stupide mais je ne le vois pas.
J'ai pu utiliser l'alias drush avec la configuration suivante:
Supposons deux choses:
vagrant box a une sorte d'adresse IP statique (peut être privée, par exemple: 192.168.56.101)
L'IP de vagabond est disponible sous forme symbolique (par exemple, nous avons une seule ligne dans/etc/hosts avec ip et hostname). (par exemple: test.site.local).
Étape 1: nous devons copier les paramètres générés par la commande vagrant ssh-config dans $ HOME/.ssh/config
Host test.site.local
IdentitiesOnly yes
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile [path to vagrant private insecure key]
Étape 2: Avec une telle configuration, mon alias était sous la forme suivante:
$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"
);
Le caractère ~
Est développé par Bash. Drush ne fournit pas ce même service, vous devez donc remplacer ~
Par le chemin d'accès à votre répertoire personnel.
Ainsi, par exemple:
$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',
);
Ce n'est pas testé, mais cela devrait fonctionner, à l'exception de toute faute de frappe simple.
MISE À JOUR:
Je pense que je vois un bug Drush ici. Drush va supposer que 127.0.0.1 retourne sur la machine locale, et décidera de ne pas utiliser ssh w/out même en considérant les implications de -p dans ssh-options. Cela va nécessiter un correctif à Drush pour corriger. function drush_is_local_Host()
dans environnement.inc .
ÉMISSION SUR GITHUB:
Veuillez mettre tout commentaire concernant les correctifs potentiels dans le problème Github, l'invocation du backend Drush ne prend pas en compte le numéro de port lors de la décision locale ou distante .
J'ai contourné cela en faisant simplement une vérification de Drush dans mon fichier local settings.php via php_sapi_name() == 'cli'
et en mettant à jour ma base de données et les chaînes de connexion memcache vers Vagrant, comme ceci:
if (php_sapi_name() == 'cli') {
$databases['default']['default']['port'] = '3307';
$conf['memcache_servers'] = array(
'127.0.0.1:11212' => 'default',
);
}