เหตุการณ์ที่แชร์โฟลเดอร์และการเปลี่ยนแปลงไฟล์ของ Vagrant


14

ฉันมีเครื่องเสมือน Ubuntu ที่ฉันเข้าถึงผ่าน Vagrant บนโฮสต์ของฉัน (Mac OSX) มีโฟลเดอร์ที่มีไฟล์สองไฟล์ที่ฉันแชร์ไปยังเครื่องเสมือน ในเครื่องเสมือนนั้นฉันต้องการใช้Guardเพื่อเฝ้าดูการเปลี่ยนแปลงไฟล์และดำเนินการบางอย่างหากมีการเปลี่ยนแปลงไฟล์ใด ๆ

ฉันตั้งค่าการป้องกันอย่างถูกต้องและเมื่อเปลี่ยนไฟล์ที่ใช้ร่วมกันจากภายในเครื่องเสมือนมันทำงานได้ดีและรันสคริปต์ที่เหมาะสม แต่ถ้าฉันพยายามเปลี่ยนไฟล์ที่ใช้ร่วมกันจากเครื่องโฮสต์ของฉันเหตุการณ์การเปลี่ยนแปลงไฟล์นี้จะไม่เผยแพร่และการป้องกันจะไม่ตอบสนอง

นี่คือลักษณะโฟลเดอร์คนจรจัดของฉันที่ดูเหมือน (สิ่งปกติสวย)

local_config.vm.share_folder "app", "/var/www/app/current", "../app"

ฉันได้ลองใช้การแบ่งปัน NFS ( :nfs => true) แต่ก็ไม่ได้ช่วยอะไร

มีวิธีใดบ้างที่จะทำให้เหตุการณ์การเปลี่ยนแปลงไฟล์เผยแพร่จากโฮสต์ไปยังเครื่องเสมือน? หรือนี่เป็นสิ่งที่เกี่ยวกับธรรมชาติของ Vagrant / VirtualBox?

UPDATE:

หลังจากการทดลองเพิ่มเติมฉันติดตั้งZenTest gem ซึ่งมีเครื่องมือ autotest ที่อนุญาตการทำงานที่คล้ายกันเกี่ยวกับเหตุการณ์การเปลี่ยนแปลงไฟล์

เมื่อเรียกใช้ autotest ในเครื่องเสมือนและเปลี่ยนไฟล์จากเครื่องโฮสต์ของฉันการเปลี่ยนแปลงเหล่านี้จะแพร่กระจายและตอบกลับอัตโนมัติ

จากสิ่งนี้ดูเหมือนว่าการเผยแพร่เหตุการณ์การเปลี่ยนแปลงไฟล์จะเป็นปัญหาของการ์ดรักษาความปลอดภัยไม่ใช่กล่องคนเร่ร่อนหรือกล่องเสมือน

ฉันไม่ได้พิจารณาถึงความแตกต่างในการใช้งานระหว่างการ์ดป้องกันและระบบควบคุมอัตโนมัติ

ตอนนี้ฉันรู้ว่ามันเป็นไปได้ที่จะจับเหตุการณ์การเปลี่ยนแปลงไฟล์จากโฮสต์ในเครื่องเสมือน ใครบ้างมีความคิดเกี่ยวกับวิธีการใช้ยามนี้? ฉันชอบที่จะระวังมากกว่าเพราะใช้ DSL และการใช้งานทั่วไป

คำตอบ:


10

สาเหตุหลักคือ VirtualBox ไม่ได้ทำให้เหตุการณ์การเปลี่ยนแปลงไฟล์บนโฮสต์ไปยัง VM Guard (บน Linux) คาดว่าจะได้รับการแจ้งเตือนผ่านการแจ้งเหตุการณ์ แต่คุณสามารถมีการสำรวจความคิดเห็นยามสำหรับเหตุการณ์ที่มีguard -pแต่จะนำไปสู่ CPU ของคุณ maxing guard -p -l 10ออกเพื่อให้คุณสามารถเค้นลงเลือกตั้งกลับมาพร้อมกับ

จากguard help start:

  -l, [--latency=Overwrite Listen's default latency]
  -p, [--force-polling=Force usage of the Listen polling listener]

http://www.softr.li/blog/2012/07/21/running-guard-over-vagrant


ขอบคุณ Gabe ฉันออกจากยามเฝ้ายามมาแล้ว ถึงกระนั้นคำตอบของคุณก็มีค่าสำหรับการทำความเข้าใจ
rdamborsky

4

ฉันรู้ว่านี่เป็นคำถามที่เก่ากว่า แต่นี่เป็นคำตอบล่าสุด:

-o/--listen-onเอกสารทางเลือกของGuard

วางที่นี่สำหรับการอ้างอิงอย่างรวดเร็ว:

-o/--listen-on option

Use Listen's network functionality to receive file change events from the
network. This is most useful for virtual machines (e.g. Vagrant) which have
problems firing native filesystem events on the guest OS.

Suggested use:

On the host OS, you need to listen to filesystem events and forward them to
your VM using the listen script:

    $ listen -f 127.0.0.1:4000

Remember to configure your VM to forward the appropriate ports, e.g.
in Vagrantfile:

    config.vm.network :forwarded_port, guest: 4000, host: 4000

Then, on your guest OS, listen to the network events but ensure you
specify the host path:

    $ bundle exec guard -o '10.0.2.2:4000' -w '/projects/myproject'

1

หากใครพบปัญหานี้และตัวป้องกันยังคงไม่ทำงาน ...

ฉันสิ้นสุดการใช้watchr มันเป็นทางเลือกในการป้องกัน การเผยแพร่กิจกรรมจากเครื่องโฮสต์ไปยังเครื่องแขกทำงาน ok ใน watchr นอกจากนี้ยังมีความยืดหยุ่นมากกว่า autotest


Events propagation from host to guest machine works ok in watchr.อย่างไร? ใช้โพลหรือไม่ หาก VirtualBox ไม่เผยแพร่กิจกรรมจะทราบได้อย่างไรว่าไฟล์มีการเปลี่ยนแปลงอย่างไร
Nateowami
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.