Bagaimana Anda menulis alias drush untuk kotak Vagrant lokal?

9

Saya mencoba menulis alias drushal sederhana untuk terhubung ke situs Drupal yang berjalan pada instance Vagrant lokal.

Saya memiliki yang berikut dalam file bernama ~/.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',
);

Alias ​​ditemukan. drush sapengembalian:

l
l.o

Namun, ketika saya drush @l.o statustidak terhubung ke host jarak jauh:

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   :

Saya telah mengkonfirmasi bahwa perintah ini berhasil terhubung ke gelandangan:

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

Debugging output tidak menunjukkan perintah SSH sejauh yang saya tahu:

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]

Saya tahu saya harus melakukan sesuatu yang bodoh tetapi saya tidak bisa melihatnya.

Justin
sumber
Apa yang drush --debug @l.o statusditunjukkan? Perintah ssh yang tepat harus dikubur dalam output.
mpdonadio
FWIW, saya selalu menggunakan .ssh / config untuk mengatur info koneksi SSH daripada opsi drush.
mpdonadio
Hmm, tidak ada perintah ssh dalam bentuk apa pun dalam output debug. Debug ditambahkan di atas.
Justin
Apakah alias non-Vagrant, tetapi jauh, berfungsi? Debug yang Anda posting menunjukkan bahwa itu bahkan tidak mencoba koneksi jarak jauh (Anda akan melihat baris mulai 'Mulai redispatch melalui proses invoke' dan 'Backend
invoke
Ya, saya punya banyak dan mereka semua punya.
Justin

Jawaban:

6

Saya dapat menggunakan alias drush dengan konfigurasi berikut:

Mari kita asumsikan dua hal:

  • vagrant box memiliki semacam ip statis (bisa pribadi, misalnya: 192.168.56.101)

  • IP gelandangan tersedia dalam bentuk simbolis (misalnya, kami memiliki satu baris di / etc / hosts dengan ip dan hostname). (misalnya: test.site.local).

Langkah 1: Kita perlu menyalin pengaturan, dihasilkan oleh perintah vagrant ssh-config ke $ HOME / .ssh / config

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

Langkah 2: Dengan konfigurasi seperti itu, alias saya dalam bentuk berikut:

$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
sumber
Ini adalah solusi yang sangat bagus. Saya tidak menentukan opsi ssh di file alias saya menggunakan "vagrant ssh-config", semua yang saya butuhkan ada di sana.
Angry Dan
Ini bekerja dengan baik, meskipun dalam kasus saya, saya harus melakukan root seperti: 'root' => '/ gelrant / docroot'
ognockocaten
Menggunakan /dev/nullsebagai file host yang dikenal menghasilkan peringatan setiap kali drush dijalankan. Saya arahkan HOME/.ssh/known_hosts_vagrantke menggunakan file terpisah. Maka peringatan hanya ditampilkan sekali.
Tim
3

Karakter ~diperluas oleh Bash. Drush tidak menyediakan layanan yang sama ini, jadi Anda harus mengganti ~dengan path ke direktori home Anda.

Jadi, misalnya:

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

Itu belum teruji, tetapi itu harus berhasil, kecuali salah ketik apa pun.

MEMPERBARUI:

Saya rasa saya melihat bug Drush di sini. Drush akan berasumsi bahwa 127.0.0.1 akan kembali ke mesin lokal, dan akan memutuskan untuk tidak menggunakan ssh w / out walaupun mempertimbangkan implikasi dari -p dalam ssh-options. Ini akan membutuhkan patch untuk Drush untuk memperbaikinya. function drush_is_local_host()dalam environment.inc .

MASALAH PADA GITHUB:

Silakan berikan komentar tentang perbaikan potensial dalam masalah Github, Drush backend invoke tidak mempertimbangkan nomor port ketika memutuskan lokal vs jarak jauh .

greg_1_anderson
sumber
Itu tidak berhasil. Tapi saya tidak tahu tentang drush_server_home (). Terima kasih! Saya pemecahan masalah.
Justin
3

Saya menyiasati ini dengan hanya melakukan pemeriksaan untuk Drush dalam file settings.php lokal saya melalui php_sapi_name() == 'cli'dan memperbarui database saya dan string koneksi memcache ke Vagrant, seperti ini:

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

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