คุณจะเขียนนามแฝงที่มีชีวิตชีวาสำหรับกล่อง Vagrant ในพื้นที่ได้อย่างไร


9

ฉันกำลังพยายามเขียนนามแฝงที่ใช้งานง่ายเพื่อเชื่อมต่อกับไซต์ 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   :

ฉันยืนยันว่าคำสั่งนี้เชื่อมต่อกับคนจรจัดได้สำเร็จ:

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 ใด ๆ ในเอาต์พุตดีบัก แก้ไขข้อบกพร่องด้านบน
Justin

นามแฝงอื่น ๆ ที่ไม่ใช่ Vagrant แต่ทำงานได้ในระยะไกล การดีบั๊กที่คุณโพสต์แสดงให้เห็นว่ามันไม่ได้พยายามเชื่อมต่อระยะไกล (คุณควรเห็นบรรทัดที่ขึ้นต้นด้วย 'เริ่มต้นการกระจายใหม่ผ่านกระบวนการเรียกใช้' และ 'แบ็กเอนด์เรียกใช้: ssh ... '
mpdonadio

ใช่ฉันมีจำนวนมากและพวกเขาทั้งหมดทำ
Justin

คำตอบ:


6

ฉันสามารถใช้ชื่อแทนที่มีการกำหนดค่าต่อไปนี้:

สมมติว่ามีสองสิ่ง:

  • กล่องคนเร่ร่อนมีไอพีสแตติก (สามารถเป็นส่วนตัวได้ตัวอย่างเช่น: 192.168.56.101)

  • IP ของคนเร่ร่อนมีให้บริการในรูปแบบสัญลักษณ์ (ตัวอย่างเช่นเรามีบรรทัดเดียวใน / etc / hosts พร้อม ip และชื่อโฮสต์) (ตัวอย่างเช่น: 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"
);

นี่เป็นทางออกที่ดีจริงๆ ฉันไม่ได้ระบุ ssh-options ใด ๆ ในไฟล์นามแฝงที่ใช้ "vagrant ssh-config" ทุกสิ่งที่ฉันต้องการอยู่ที่นั่น
Angry Dan

มันใช้งานได้ดี แต่ในกรณีของฉันฉันต้องตั้งค่ารูทดังนี้: 'root' => '/ คนจรจัด / docroot'
ognockocaten

การใช้/dev/nullเป็นไฟล์โฮสต์ที่รู้จักส่งผลให้มีการเตือนทุกครั้งที่มีการเรียกใช้ 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',
);

มันยังไม่ได้ทดสอบ แต่ควรใช้งานได้โดยพิมพ์คำผิดง่าย ๆ

UPDATE:

ฉันคิดว่าฉันเห็นข้อผิดพลาด Drush ที่นี่ Drush จะสันนิษฐานว่า 127.0.0.1 กำลังกลับไปที่เครื่องโลคอลและจะตัดสินใจไม่ใช้ ssh w / out แม้จะพิจารณาถึงความหมายของ -p ใน ssh-options นี้จะต้องมีการแก้ไขเพื่อ Drush เพื่อแก้ไข function drush_is_local_host()ในenvironment.inc

ปัญหาเกี่ยวกับ GITHUB:

กรุณาใส่ความเห็นใด ๆ เกี่ยวกับการแก้ไขปัญหาที่อาจเกิดขึ้นในฉบับ Github, Drush แบ็กเอนด์วิงวอนไม่พิจารณาหมายเลขพอร์ตเมื่อตัดสินใจท้องถิ่นเทียบกับระยะไกล


นั่นไม่ได้ผล แต่ฉันไม่รู้เกี่ยวกับ drush_server_home () ขอบคุณ! ฉันกำลังแก้ไขปัญหา
Justin


3

ฉันได้รับสิ่งนี้โดยเพียงแค่ทำการตรวจสอบ Drush ในไฟล์ settings.php ในพื้นที่ของฉันผ่านทางphp_sapi_name() == 'cli'และอัปเดตฐานข้อมูลและสตริงการเชื่อมต่อ memcache ของฉันเป็น Vagrant เช่นนี้

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

  $conf['memcache_servers'] = array(
    '127.0.0.1:11212' => 'default',
  );
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.