वैग्रंट में प्रतीकात्मक लिंक और सिंक किए गए फ़ोल्डर


99

मैं अपनी टीम को एक सामान्य विकास वातावरण प्रदान करने के लिए वैग्रंट का उपयोग करना चाहता हूं। मेजबान पूरी तरह से अलग हैं:

  • कुछ ओएस एक्स, कुछ लिनक्स और कुछ विंडोज का उपयोग करते हैं।
  • कुछ VMware का उपयोग करते हैं, कुछ VirtualBox का उपयोग करते हैं।

वीएम के अंदर हम लिनक्स चलाना चाहते हैं।

अब तक, सब कुछ ठीक है।

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

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

अब तक, हमने कई विकल्पों की कोशिश की है:

  • वैग्रांट के एक मुद्दे में एक वर्कअराउंड का उल्लेख किया गया है , दुर्भाग्य से यह वर्चुअलबॉक्स-ओनली है और यह वीएमवेयर चलाने वालों की मदद नहीं करता है। अब तक, हमें Vagrantfile में उपयोग किए गए प्रदाता के आधार पर कोड चलाने का एक तरीका नहीं मिला है ।
  • एक मानक साझा फ़ोल्डर का उपयोग करने के बजाय हमने अब rsync प्रकार का उपयोग करने की कोशिश की है । यह विंडोज पर काम करता है, लेकिन ओएस एक्स पर बहुत सारी त्रुटियों के साथ क्रैश होता है, जो हमें बताता है कि symlink has no referent(प्रतीकात्मक लिंक में एक त्रुटि)।
  • हमने एनएफएस के बारे में सोचा , लेकिन यह केवल तभी काम करता है जब आप होस्ट के रूप में विंडोज का उपयोग नहीं करते हैं।
  • हम भले ही एसएमबी के बारे में हैं , लेकिन यह फिर से होस्ट के रूप में केवल विंडोज पर काम करता है।

मैं कल्पना नहीं कर सकता कि हम इस ग्रह पर एकमात्र या पहले व्यक्ति हैं जिन्हें साझा मंच के भीतर मल्टी-प्लेटफॉर्म होस्ट और प्रतीकात्मक लिंक के साथ समस्याओं का अनुभव करना है।

आप इस मुद्दे को कैसे हल कर सकते हैं, ताकि हम प्रतीकात्मक लिंक रख सकें, लेकिन फिर भी विभिन्न होस्ट ऑपरेटिंग सिस्टम का उपयोग करें?



@SteveBennett, वह मुद्दा (जो वर्तमान स्वीकृत उत्तर संदर्भों) का समाधान वैग्रांट 1.1 में किया गया था, जिसे ओपी ने प्रश्न पोस्ट करने से 15 महीने पहले जारी किया था। और यह वैसे भी VirtualBox साझा किए गए फ़ोल्डर्स के बारे में है, न कि rsync'd फ़ोल्डर। नीचे मेरा उत्तर देखें (स्वीकृत उत्तर गलत है)।
jdunk

जवाबों:


64

वर्चुअलबॉक्स सुरक्षा कारणों से साझा किए गए फ़ोल्डरों पर सहानुभूति की अनुमति नहीं देता है। सीमलिंक को सक्षम करने के लिए निम्नलिखित लाइन को Vmrantfile में vm प्रदाता कॉन्फिगर ब्लॉक में जोड़ा जाना चाहिए:

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end

इसके अतिरिक्त, विंडोज़ पर, व्यवस्थापक अधिकारों के साथ शेल में निष्पादित होने की आवश्यकता होती है। कोई वर्कअराउंड आवश्यक नहीं।


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

2
@SteveBennett, फिर से सहमत हुए: संभावित भ्रम। स्पष्ट करने के लिए सभी और अधिक कारण। यह सुझाव देना मुश्किल है कि इस सुझाव ने आपके मुद्दे को हल कर दिया होगा जब यह ऐसे पुराने [लंबे समय से हल किए गए] मुद्दे को संदर्भित करता है, जब तक कि आप योनि के पुराने संस्करण का उपयोग नहीं कर रहे थे। और अगर ऐसा होता है, तो भी IMO यह साझा dirs (उदाहरण के लिए "git स्टेटस" कई सेकंड ले रहा है) के लिए VBox के abysmal फाइल सिस्टम प्रदर्शन पर विचार करने में बहुत कम मदद करता होगा, हालांकि यह संभव है कि आप बहुत कम फाइलों के साथ केवल एक छोटी परियोजना साझा कर रहे थे। mitchellh.com/…
jdunk

5
vagrant upव्यवस्थापक अधिकारों के साथ एक शेल में चलना वह सब है जो आवश्यक है। के रूप में @jdunk कहे अनुसार, इस config विकल्प पहले से ही डिफ़ॉल्ट रूप से Vagrant में, सेट किया गया है के रूप में इस के लिए प्रतिबद्ध है जो लगभग एक साल हुआ पहले इस सवाल का जवाब तैनात थे। उस ने कहा, vagrant upव्यवस्थापक अधिकारों के साथ एक शेल में चलने से मेरी समस्या हल हो गई।
Ajedi32

2
सवाल का जवाब नहीं देता। इसके सिंक किए गए फ़ोल्डर पर काम नहीं कर रहा है।
मानेल

यह उत्तर 2 प्रमुख कारणों से गलत है। 1. यह VBox साझा किए गए फ़ोल्डरों को संदर्भित करता है, न कि rsynced निर्देशिकाओं को - दो पूरी तरह से अलग चीजें। 2. ओपी के प्रश्न के 15 महीने पहले जारी वैग्रांट 1.1 में यह सेटिंग पहले से ही डिफ़ॉल्ट थी। अधिक जानकारी के लिए नीचे मेरा जवाब देखें।
jdunk

94

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


मुझे इसी मुद्दे का सामना करना पड़ा: ओएस एक्स पर, मुझे symlink has no referentrsync त्रुटि मिली । मैं व्यक्तिगत रूप से मेरे लिए विशेष rsync आर्गन जोड़कर इसे हल करने में सक्षम था vagrantfile:

config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"]

मैंने इस मुद्दे को योनि के गीथब पर भी खुलने के लिए rsync__argsकहा, जो कि उनके डिफ़ॉल्ट मान के साथ गलत प्रतीत होता है (विशेष रूप से, जो कि डिफ़ॉल्ट आर्ग में से --copy-linksएक है, दूसरे को तोड़ता हुआ प्रतीत होता है --archive, कम से कम जहां तक ​​टूटी हुई सहानुभूति की नकल करने का संबंध है )।


अच्छी कॉल - धन्यवाद @jdunk हां, वैग्रांत डॉक्स के अनुसार, --copy-linksविकल्प डिफ़ॉल्ट रूप से सेट किया गया है। यह मेरी समस्या थी। उस को हटाकर (ऊपर अपने उत्तर का उपयोग करके) - जो उसकी देखभाल करता है।
फिल बिरनी

1
बहुत उपयोगी है, धन्यवाद। हालांकि मैं विंडोज के विकल्प की कामना करूंगा।
अलेक्सांद्र माकोव

4
ध्यान दें कि वैग्रांट डॉक्स के अनुसार, साझा किए गए फ़ोल्डर वर्चुअलबॉक्स उपयोगकर्ताओं के लिए सिंक किए गए फ़ोल्डर का डिफ़ॉल्ट प्रकार है: "यदि आप वर्चुअलबॉक्स प्रदाता का उपयोग कर रहे हैं, तो वर्चुअलबॉक्स साझा किए गए फ़ोल्डर डिफ़ॉल्ट सिंक किए गए फ़ोल्डर प्रकार हैं।" ( docs.vagrantup.com/v2/synced-folders/virtualbox.html ) ओपी का सवाल यह भी लगता है कि वर्चुअलबॉक्स साझा किए गए फ़ोल्डर एक चिंता का विषय है, इसलिए स्वीकृत जवाब समस्या के कम से कम हिस्से को संबोधित करने का प्रयास करता है (और वास्तव में किया मेरे लिए समस्या को ठीक करें)।
Ajedi32

मेरी गांड को बचाने के लिए बहुत-बहुत धन्यवाद, मैंने इंटरनेट पर हर जगह देखा है और अंत में कोई है जो इस समस्या को समझता है!
डोविजू

1
धन्यवाद। यह वही है जो मेरे मुद्दे को हल करता है (शीर्षक में एक, और वह जो मैं यहां समाधान के लिए देख रहा हूं, और जो भ्रमित रूप से पूछा नहीं जा रहा है)।
जॉनीपल्स

7

मैंने चल रहे त्रुटि को हल करने के लिए इन सभी विकल्पों की कोशिश की npm install

बस एक व्यवस्थापक प्रॉम्प्ट में योनि को चलाने और vm ( vagrant reload) लोड करने से समस्या का समाधान हो गया।

मैंने वापस जाकर SharedFoldersEnableSymlinksCreateवैग्रांटफाइल से कॉन्फ़िगरेशन को हटा दिया , और सब कुछ अभी भी ठीक था।


npm updateमेरे योनि साझा फ़ोल्डर में काम नहीं कर रहा था। इस समाधान ने इसे किसी कारण से तय किया।
Emre

1
अधिक शोध के बाद, यह पता चलता है कि प्रतीकात्मक लिंक बनाने के लिए डिफ़ॉल्ट रूप से खिड़कियों में व्यवस्थापक अनुमति की आवश्यकता होती है। अनुमतियों को संशोधित करने के लिए, यहां उत्तर देखें: superuser.com/a/125981
gameweld

Vagrant और कमांड प्रॉम्प्ट को विंडो 10 में प्रशासक के रूप में चलाना मेरे लिए npx create-react-app 'project_name' पर काम करता है।
सीबो

2

डिफ़ॉल्ट सिंक किए गए फ़ोल्डर प्रकार में vboxsfबड़ी संख्या में फ़ाइलों / निर्देशिकाओं के साथ प्रदर्शन का मुद्दा है, और प्रतीकात्मक लिंक और हार्ड लिंक के लिए समर्थन का अभाव है (टिकट 818 देखें) - 7+ वर्ष का बग)। इसके इस्तेमाल से बचें।

rsync प्रकार सिंक किया गया फ़ोल्डर आपका सबसे अच्छा विकल्प हो सकता है।

आपने उल्लेख किया कि यह दुर्घटनाग्रस्त हो गया, आप rsync का कौन सा संस्करण चला रहे हैं? इसे ब्रुअ के माध्यम से 3.1.0 में अपडेट करने का प्रयास करें, मुझे पता है कि ओओटीबी एक बहुत पुराना है (2.x), जो समस्या पैदा कर सकता है।


[wdd@localhost ~]$ sudo mount -t rsync node share mount: unknown filesystem type 'rsync'
मूसा हैदरी

1
मुझे खुशी हुई जब मैंने इस जवाब को पढ़ा, यह सोचकर मेरी समस्या का समाधान हो गया लेकिन जब मैं sudo mount -t rsync shared /var/wwwत्रुटि करता हूं तो मुझे ऊपर जैसा मिलता हैmount: unknown filesystem type 'rsync'
samayo

rsyncफ़ाइल सिस्टम प्रकार कभी नहीं होता है, इसलिए आप इसे माउंट नहीं कर पाएंगे।
टेरी वांग

@samyo का संदर्भ vagrantup.com/docs/synced-folders/rsync.html है जिसमें आपको कॉन्फ़िगर करने Vagrantfileऔर मैन्युअल रूप से चलाने vagrant rsyncया चलाने की आवश्यकता है vagrant rsync-auto। अन्यथा यह केवल ऊपर और फिर से लोड हो जाएगा।
टेरी वैंग

1

करीब एक घंटे तक उपद्रव करने के बाद और कुछ अलग उपाय आजमाए (vagrant-vbguest , मार्विन द्वारा सुझाए गए समाधान), मुझे वर्चुअलबॉक्स 4.8.10, वैग्रांट 1.5.1 के साथ काम करने के लिए साझा किए गए फ़ोल्डर्स में सहानुभूति प्राप्त करने में सक्षम नहीं था।

मैंने पाया कि एक सरल समाधान एक अलग साझा फ़ोल्डर को कॉन्फ़िगर करना है और फिर रूबी के File.readlinkअंतर्निहित पथ में पढ़ने के लिए उपयोग करना है:

config.vm.synced_folder File.readlink('SYMLINK'), "/mount/path"

1
मुझे नहीं मिला। क्या आप एक उदाहरण के साथ समझा सकते हैं? धन्यवाद
Cassiano

0

निम्नलिखित लाइन को Vagrantfile में जोड़ें:

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end

यह मेरे लिए ही काम किया बाद मैं 2.2.1 के लिए 6.0.4 और 2.2.4 आवारा को virtualbox 6.0.8 डाउनग्रेड।

जब आप टर्मिनल खोलें (मैं विंडोज़ 10 पर git bash का उपयोग करता हूं) "Run as Admin" के साथ।

git bash को बदलने का भी प्रयास करें: प्रोजेक्ट फ़ाइल में: $ vim .गित / कॉन्फिग को साइमलिंक में बदलें = true

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = true
        ignorecase = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.