Как вы пишете псевдоним для локального Vagrant?

9

Я пытаюсь написать простой псевдоним drush для подключения к сайту Drupal, работающему на локальном экземпляре Vagrant.

У меня есть следующее в файле с именем ~/.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',
);

Псевдоним найден. drush saвозвращает:

l
l.o

Однако, когда я drush @l.o statusне подключаюсь к удаленному хосту:

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   :

Я подтвердил, что эта команда успешно подключается к vagrant:

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

Вывод отладки не показывает команду SSH, насколько я могу сказать:

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]

Я знаю, что, должно быть, делаю что-то глупое, но просто не вижу этого.

Джастин
источник
Что drush --debug @l.o statusпоказывает? Точная команда ssh должна быть скрыта в выводе.
mpdonadio
FWIW, я всегда использую .ssh / config для настройки информации о соединении SSH, а не опции drush.
mpdonadio
Хм, в выводе отладки нет команды ssh. Отладка добавлена ​​выше.
Джастин
Работают ли другие не Vagrant, но удаленные, псевдонимы? Отладка, которую вы опубликовали, показывает, что она даже не пыталась выполнить удаленное соединение (вы должны увидеть строки, начинающиеся с «Начать повторную отправку через процесс вызова» и «
Внутренний вызов
Да, у меня много, и они все делают.
Джастин

Ответы:

6

Я смог использовать псевдоним drush со следующей конфигурацией:

Давайте предположим две вещи:

  • vagrant box имеет какой-то статический ip (может быть приватным, например: 192.168.56.101)

  • IP vagrant доступен в символической форме (например, у нас есть одна строка в / etc / hosts с ip и hostname). (например: test.site.local).

Шаг 1: Нам нужно скопировать настройки, сгенерированные командой vagrant ssh-config, в $ HOME / .ssh / config

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

Шаг 2: При такой конфигурации мой псевдоним был в следующей форме:

$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
источник
Это действительно хорошее решение. Я не указал никаких опций ssh ​​в моем файле псевдонима, использовав "vagrant ssh-config", там было все, что мне было нужно.
Злой Дан
Это работало хорошо, хотя в моем случае мне пришлось установить root следующим образом: 'root' => '/ vagrant / docroot'
ognockocaten
Использование /dev/nullв качестве известного файла hosts приводит к предупреждению при каждом запуске drush. Я указываю HOME/.ssh/known_hosts_vagrantна использование отдельного файла. Тогда предупреждение показывается только один раз.
Тим
3

Персонаж ~расширен Bash. Drush не предоставляет эту же услугу, поэтому вы должны заменить ~путь к вашему домашнему каталогу.

Так, например:

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

Это не проверено, но оно должно работать, за исключением любых опечаток.

ОБНОВИТЬ:

Я думаю, что вижу ошибку Drush здесь. Drush будет предполагать, что 127.0.0.1 возвращается на локальный компьютер, и решит не использовать ssh w / out, даже принимая во внимание значение -p в ssh-options. Это будет требовать исправления для Drush, чтобы исправить. function drush_is_local_host()в окружающей среде .

ВЫПУСК НА GITHUB:

Пожалуйста, оставляйте любые комментарии, касающиеся возможных исправлений в проблеме Github, бэкэнд-вызов Drush не учитывает номер порта при выборе локального или удаленного .

greg_1_anderson
источник
Это не сработало. Но я не знал о drush_server_home (). Спасибо! Я устраняю неполадки.
Джастин
3

Я получил вокруг этого просто делать чек на Drush в моем локальном файле settings.php с помощью php_sapi_name() == 'cli'и обновляя свою базу данных и кэш соединение строки в Vagrant, как это:

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

  $conf['memcache_servers'] = array(
    '127.0.0.1:11212' => 'default',
  );
}
Джастин
источник