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.


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"
);

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 .


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',
  );
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.