वैगरंट साझा फ़ोल्डर और फ़ाइल परिवर्तन ईवेंट


15

मेरे पास ubuntu वर्चुअल मशीन है जिसे मैं वैग्रैंट के माध्यम से एक्सेस कर रहा हूं। मेरे होस्ट (मैक ओएसएक्स) पर, कुछ फ़ाइलों के साथ एक फ़ोल्डर है, जिसे मैं वर्चुअल मशीन पर साझा करता हूं। उस वर्चुअल मशीन में, मैं फ़ाइलों के परिवर्तनों को देखने के लिए गार्ड का उपयोग करना चाहता हूं और यदि कोई भी फाइल बदलती है, तो वे कुछ कार्रवाई करते हैं।

मैंने ठीक से गार्ड सेट किया है, और जब वर्चुअल मशीन के भीतर से साझा फ़ाइल को बदल रहा है, तो यह ठीक काम करता है और उपयुक्त स्क्रिप्ट चलाता है। लेकिन, अगर मैं अपने होस्ट मशीन से साझा की गई फ़ाइल को बदलने की कोशिश करता हूं, तो यह फ़ाइल परिवर्तन घटना प्रचारित नहीं करती है और गार्ड प्रतिक्रिया नहीं करता है।

यह मेरा योनि साझा फ़ोल्डर कैसा दिखता है (बहुत सामान्य सामान)

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

मैंने NFS शेयरिंग ( :nfs => true) का उपयोग करने की भी कोशिश की, लेकिन इससे कोई फायदा नहीं हुआ।

क्या फ़ाइल परिवर्तन की घटनाओं को होस्ट से वर्चुअल मशीन तक प्रचारित करने का कोई तरीका है? या यह वैग्रंट / वर्चुअलबॉक्स प्रकृति का कुछ है?

अपडेट करें:

कुछ और परीक्षणों के बाद, मैंने ज़ेनटेस्ट रत्न स्थापित किया , जिसमें ऑटोटेस्ट टूल शामिल है जो फ़ाइल परिवर्तन घटनाओं के बारे में समान कार्यक्षमता की अनुमति देता है।

जब वर्चुअल मशीन में ऑटोटेस्ट चलाते हैं और मेरे होस्ट मशीन से फाइल बदलते हैं, तो ये परिवर्तन प्रचारित होते हैं और ऑटोटेस्ट रिएक्ट होते हैं ।

इसके आधार पर, ऐसा लगता है कि फ़ाइल परिवर्तन ईवेंट प्रचार एक मुद्दा है, न कि आवारा या आभासी बॉक्स।

मैं हालांकि गार्ड और ऑटोटेस्ट के बीच कार्यान्वयन अंतर पर ध्यान नहीं देता।

अब मुझे पता है कि वर्चुअल मशीन में होस्ट से फ़ाइल परिवर्तन की घटनाओं को पकड़ना संभव है। किसी को भी गार्ड का उपयोग कर इसे प्राप्त करने पर कोई विचार है? मुझे इसकी DSL और जेनेरिक प्रयोज्यता के कारण गार्ड अधिक पसंद है।

जवाबों:


11

मूल कारण यह है कि वर्चुअलबॉक्स होस्ट पर फ़ाइल परिवर्तन की घटनाओं को वीएम पर प्रसारित नहीं करता है। गार्ड (लिनक्स पर) घटनाओं को इनोटिफाई करके सूचनाएं प्राप्त करने की उम्मीद कर रहा है। इसके बजाय, आप के साथ घटनाओं के लिए गार्ड पोल कर सकते हैं guard -p, लेकिन इससे आपका सीपीयू अधिकतम हो सकता है, इसलिए आप मतदान को वापस नीचे फेंक सकते हैं 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


धन्यवाद गेबे, मैंने कुछ समय पहले पहरेदार के लिए गार्ड छोड़ा था। फिर भी, आपका उत्तर समझने के लिए मूल्यवान है।
rdamborsky

4

मुझे पता है कि यह एक पुराना सवाल है, लेकिन यहाँ एक और अधिक जवाब है:

गार्ड -o/--listen-onविकल्प प्रलेखन

त्वरित संदर्भ के लिए यहाँ पास्ट किया गया:

-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

यदि कोई इस मुद्दे पर चलता है और गार्ड अभी भी काम नहीं कर रहा है ...

मैं पहरेदार का उपयोग कर समाप्त हो गया । यह गार्ड के लिए एक विकल्प है। मेज़बान से अतिथि मशीन तक कार्यक्रम का प्रचार वॉच में ठीक काम करता है। यह ऑटोटेस्ट की तुलना में अधिक लचीला भी है।


Events propagation from host to guest machine works ok in watchr.कैसे? क्या यह मतदान का उपयोग करता है? अगर वर्चुअलबॉक्स घटनाओं को प्रचारित नहीं कर रहा है, तो यह कैसे पता चल सकता है कि फ़ाइल कब बदल गई है?
नटोमामी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.