2014-12-09 11 views
9

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

जैसे मैं खुश किसी को इस स्थिति में मेरा मार्गदर्शन करने के लिए: एक परियोजना पर काम करने

  • आवश्यकता। यह गिट रेपो है। MySQL, php, आदि, आदि की आवश्यकता है
  • वीएम महान काम करता है (प्रदत्त)
  • लेकिन इस रेपो में फ़ाइलों को संपादित करना एसएसएच और "विरासत" संपादकों के माध्यम से इतना आसान नहीं है। पसंदीदा आईडीई का उपयोग करना चाहते हैं।

वीएम रेपो पर /home/vagrant/src पर है। मैं चाहता हूं कि यह होस्ट में ../src में दृश्यमान/संपादन योग्य हो।

config.vm.synced_folder '../src', '/home/vagrant/src'

यह "काम" सिवाय इसके कि यह ../src जो खाली है से उन के साथ /home/vagrant/src से सभी सामग्री को अधिलेखित कर देता है:

मैं डॉक्स पढ़ सकते हैं और Vagranfile में इस putted।

कोई कामकाज? मैंने गिट के माध्यम से रेपो को क्लोन करने की संभावना माना (सार्वजनिक रूप से जीथ्यूब के माध्यम से उपलब्ध) और फ़ोल्डर को वीएम में सिंक करें लेकिन यह सही महसूस नहीं करता है और उत्पादन कॉन्फ़िगरेशन भी खो देता है।

+0

क्या तुमने कभी एक समाधान मिला? –

+0

वर्चुअलबॉक्स और आवृत्ति का आपका संस्करण क्या है? –

+0

@ जॉन बुचिर 'होम/वारंटी/src' ओवरराइट नहीं किया गया है, लेकिन जब मूल फ़ोल्डर VM पर घुड़सवार होता है तो मूल छुपा और प्रतिस्थापित होता है, इसके बारे में आप इतना कुछ नहीं कर सकते हैं। आप होस्ट पर रेपो क्लोन नहीं कर सकते हैं और वीएम पर फ़ोल्डर सिंक क्यों कर सकते हैं? ऐसा इसलिए है क्योंकि संकलन बहुत अधिक फाइलें बनायेगा और सिंक धीमा हो जाएगा (php में संगीतकार की तरह?)? –

उत्तर

4

मेरे Vagrantfile दिखता है इस तरह:

Vagrant.configure(2) do |config| 
    config.vm.box = "bento/ubuntu-16.04" 
    config.vm.network "forwarded_port", guest: 80, host: 8080 
    config.vm.network :forwarded_port, guest: 22, host: 10170, id: "ssh" 
    config.vm.provision :shell, path: "VagrantProvision.sh" 
    config.vm.synced_folder "./", "/var/beeGame" 
end 

आप यहाँ देख सकते हैं मैं आपके जैसे ही बयान है! Here my repo (आप इसे उदाहरण की तरह आजमा सकते हैं), और यह मेरे लिए काम करता है!मैं इस रेपो को खोलने और फ़ाइलों को संपादित करने और स्वचालित रूप से सभी अपडेट्स को संपादित करने के लिए phpStorm का उपयोग करता हूं और अपनी मेजबान मशीन (मेरा लैपटॉप) से अतिथि मशीन (आभासी) में सिंक करता हूं।

अपने मामले में, तुम ठीक कर रहे हैं, और आवारा ../src से उन के साथ /home/vagrant/src से सभी सामग्री को अधिलेखित कर देता है की क्षमता है। यह सही व्यवहार है !!! आपको अपने होस्ट मशीन (वर्चुअल) पर अपने होस्ट मशीन (अपने लैपटॉप) पर src डीआईआर में अपना कोड डालना होगा!

4

ऐसा लगता है कि आप दो तरह की सिंक की तलाश में हैं। अगर मेरी समझ सही है तो answer आपकी मदद करेगा। कृपया ध्यान दें कि मैंने अभी तक इनका परीक्षण नहीं किया है। लगता है कि कुंजी virtualbox सिंक type का उपयोग करना है।

प्रकार (स्ट्रिंग) - सिंक किए गए फ़ोल्डर का प्रकार। यदि यह निर्दिष्ट नहीं है, वग्रेंट स्वचालित रूप से आपके पर्यावरण के लिए सबसे अच्छा सिंक किए गए फ़ोल्डर विकल्प का चयन करेगा। अन्यथा, आप एक विशिष्ट प्रकार निर्दिष्ट कर सकते हैं जैसे कि "nfs"।

config.vm.synced_folder '../src', '/home/vagrant/src', type: "virtualbox" 

फिर this doc के अनुसार,

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

इसलिए मुझे यकीन नहीं है कि आपका डिफ़ॉल्ट प्रकार वर्चुअलबॉक्स क्यों नहीं है। वैसे भी यह मुझे लगता है कि एक शॉट के लायक है। डॉक्स में आगे बढ़ने के बाद दस्तावेज़ों में वर्णित वर्चुअल बॉक्स प्रकार में एक बग प्रतीत होता है। यदि आप वर्चुअल बॉक्स सिंक प्रकार का उपयोग करने जा रहे हैं तो कृपया steps here का पालन करें।

+1

2-तरफा सिंकिंग 'config.vm.synced_folder" foo ","/bar "' के साथ काम कर रही है। मेरे पास वानर 1.9.2 और वर्चुअलबॉक्स 5.1.22 है। मुझे लगता है कि ओपी के लिए दो तरह से काम कर रहा है। लेकिन मुद्दा यह है कि जब कॉन्फ़िगरेशन डाला जाता है तो अतिथि निर्देशिका खाली हो जाती है (जैसे @ frédéric-henri नोट्स, मूल निर्देशिका ओवरराइट नहीं की जाती है लेकिन "छिपी हुई" - मुझे फाइल सिस्टम या अन्य चीज़ों के बारे में पर्याप्त जानकारी नहीं है पता है इसका क्या मतलब है)। –

+0

2-रास्ता सिंकिंग इस समस्या के अनुसार Vagrant गिट repo https://github.com/hashicorp/vagrant/issues/3062 –

+0

'प्रकार: "वर्चुअलबॉक्स" की आवश्यकता है वर्चुअलबॉक्स अतिथि जोड़ों को स्थापित करने की आवश्यकता है –

2

मैंने यह निर्धारित किया है कि समस्या यह नहीं है कि config.vm.synced_folder '../src', '/home/vagrant/src' ओवरराइट/होम/वारंटी/src। समस्या यह है कि घर/वानर/src फाइल सिस्टम में एक नई अलग-अलग प्रकार की निर्देशिका बन जाती है जो खाली है। इसलिए, साझा निर्देशिका को स्थापित करने के बाद, इसे बस इसे दोबारा स्थापित करना होगा। तो ...

    अतिथि पर
  1. : sudo mv home/vagrant/src home/vagrant/src-back
  2. पड़ाव अतिथि
  3. Vagrantfile करने के लिए नए synced फ़ोल्डर जोड़ने: config.vm.synced_folder '../src', '/home/vagrant/src'
  4. शुरू अतिथि अतिथि पर
  5. : sudo mv home/vagrant/src-back/* home/vagrant/src-back/

और बातें अच्छी तरह से आगे बढ़ना चाहिए।

1

मैं इस संरचना के साथ आवारा के साथ काम:

Vagrantfile 
MyCode.php 

और Vagrantfile शामिल हैं: "।"

config.vm.synced_folder, "/ आवारा"

कि इसका मतलब है कि MyCode.php योनि फ़ोल्डर में योनि मशीन के अंदर दिखाई देता है। मैं उस फ़ाइल को योनि मशीन (अतिथि) और मेरी मशीन (मेजबान) से संपादित कर सकता हूं।

1

आप rsync का उपयोग वग्रेंट के साथ कर सकते हैं, इसमें अंतर्निहित समर्थन है। दस्तावेज में link है। लक्ष्य (अत्यधिक डिफ़ॉल्ट व्यवहार) पर अत्यधिक फ़ाइलों को अनदेखा करने के लिए rsync के लिए यह छोटा है, फिर भी आप filter की रक्षा करके अपनी लक्षित फ़ाइलों की सुरक्षा करके सटीक रूप से सिंक कर सकते हैं।

बढ़ते के विपरीत, rsync मैन्युअल रूप से ट्रिगर किया जाना है। हालांकि, आप अभी भी एक सरल फाइल सिस्टम घड़ी के लिए here दस्तावेज वाले Vagrant की rsync-auto सुविधा का उपयोग कर सकते हैं।

1

ऐसा लगता है कि आप होस्ट मशीन जो सामान्य साझा फ़ोल्डर कर के विपरीत की तरह है साथ अतिथि मशीन से एक फ़ोल्डर साझा करना चाहते हैं।

क्या आपने अतिथि पर एनएफएस प्रावधान करने के बारे में सोचा है, और फिर अतिथि से शेयर को मेजबान पर साझा करने के लिए vagrant-triggers का उपयोग किया है।

आवारा-चलाता स्थापित करके पहले शुरू:

vagrant plugin install vagrant-triggers

फिर इस तरह की एक Vagrantfile है:

# where you want to mount the guest's shared folder on the host 
host_mount_dir = "/home/david/vagrant-home" 

Vagrant.configure(2) do |config| 
    config.vm.box = "debian/jessie64" 

    # forward the NFS port  
    config.vm.network "forwarded_port", guest: 2049, host: 8049 

    # configure NFS on guest 
    config.vm.provision "shell", inline: <<SCRIPT 
apt-get install -y nfs-kernel-server nfs-common 
host_ip="$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)" 
echo "/home/vagrant  $host_ip(rw,sync,no_subtree_check)" > /etc/exports 
exportfs -a 
SCRIPT 

    # after the machine is up, mount the NFS share 
    config.trigger.after :up do 
     # mkake the dir if it doesnt exist 
     run "mkdir -p " + host_mount_dir 
     # we need the users pass to mount (make sure you are a sudoer!)' 
     puts "Please enter your password so that we can run mount" 
     run "sudo mount -t nfs -o port=8049 localhost:/home/vagrant #{host_mount_dir}" 
    end 

    # before halting, unmount the share 
    config.trigger.before :halt do 
     # we need the users pass again 
     puts "Please enter your password so that we can run mount" 
     run "sudo umount #{host_mount_dir}" 
    end 

end 

यह एक असामान्य सेटअप है, लेकिन मैं अब यह परीक्षण किया एक उबंटू मेजबान के साथ और एक डेबियन अतिथि और ऐसा लगता है - वाईएमएमवी।

0

मैं निम्नलिखित हैक इस्तेमाल किया अतिथि से फ़ोल्डर rsync को होस्ट करने के लिए:

  • सबसे पहले, बॉक्स के लिए SSH कॉन्फ़िगरेशन हो और ssh_config

$ vagrant ssh-config > ssh_config

    पर सहेजें
  • फिर rsync अतिथि फ़ोल्डर को मेजबान पर दिए गए कॉन्फ़िगरेशन
  • के साथ होस्ट करें

$ rsync -avH -e "ssh -F ./ssh_config" default:/vagrant/ ./

यह मेरे लिए काम किया है और मुझे आशा है कि यह आप के लिए काम करता है!

सादर

-- 
    =^.^= 
संबंधित मुद्दे