2014-12-09 14 views
9

Dlaczego, ponieważ trudno jest pracować i edytować kod za pośrednictwem starszych redaktorów w gościu. Celem dewelopera musi być łatwiej dla użytkownika, prawda?Vagrant: Jak zsynchronizować folder od gościa do gospodarza?

Jako taki mi się podoba ktoś poprowadzi mnie w tej sytuacji:

  • trzeba pracować nad projektem. To jest repozytorium git. Wymaga mysql, php, itp., Itp.
  • VM działa świetnie (dostarczona)
  • Ale edycja plików w tym repozycie nie jest tak łatwa dzięki redaktorom ssh i "starszym". Chcesz użyć ulubionego IDE.

W repozytorium maszyn wirtualnych jest /home/vagrant/src. Chcę, aby był widoczny/edytowalny w ../src na hoście.

Czytam docs i putted to w Vagranfile:

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

ten „prace” poza tym, że zastępuje całą zawartość z /home/vagrant/src z tymi z ../src który jest pusty.

Jakiekolwiek obejście? Rozważałem możliwość sklonowania repo poprzez git (publicznie dostępne przez github) i zsynchronizowania folderu z maszyną wirtualną, ale to nie jest w porządku i traci również konfiguracje produkcyjne.

+0

czy kiedykolwiek znaleźć rozwiązania? –

+0

Jaka jest twoja wersja VirtualBox i Vagrant? –

+0

@JohnBachir 'home/vagrant/src' nie jest nadpisywany, ale oryginalny jest ukryty i zamieniany, gdy folder hosta jest zamontowany na maszynie wirtualnej, nie można wiele z tym zrobić. dlaczego nie można sklonować repo na hoście i folderze synchronizacji na maszynie wirtualnej? czy to dlatego, że kompilacja stworzy zbyt dużo plików i synchronizacja się powolna (jak kompozytor w php?)? –

Odpowiedz

4

Moi Vagrantfile wygląda następująco:

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 

Jak widać tutaj mam to samo zdanie jak twoje! Here my repo (możesz spróbować tego jak przykład) i działa dla mnie!Używam PhpStorm do automatycznego otwierania tego repozytorium i edycji plików oraz wszystkich aktualizacji z mojego hosta (mojego laptopa) na maszynę-gościa (wirtualny).

W twoim przypadku, robisz dobrze, a włóczęga musi nadpisuje wszystkie treści z /home/vagrant/src z tymi z ../src. To jest właściwe zachowanie !!! Musisz umieścić swój kod w katalogu src na komputerze głównym (twoim laptopie) nie na swoim komputerze-gościu (wirtualnym)!

4

Wygląda na to, że szukasz synchronizacji dwukierunkowej. Jeśli moje zrozumienie jest poprawne, to pomoże ci answer. Pamiętaj, że jeszcze ich nie przetestowałem. Wydaje się, że kluczem jest użycie virtualbox sync type.

typ (ciąg) - Typ zsynchronizowanego folderu. Jeśli nie zostanie to określone, Vagrant automatycznie wybierze najlepszą zsynchronizowaną opcję folderów dla Twojego środowiska . W przeciwnym razie możesz określić konkretny typ, taki jak "nfs".

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

Potem znowu według this doc,

Jeśli używasz dostawcy Vagrant VirtualBox, a następnie VirtualBox dzielone foldery są synchronizowane domyślny typ folderu. Te zsynchronizowane foldery korzystają z systemu folderów współdzielonych VirtualBox do synchronizowania zmian plików od gościa do hosta i odwrotnie.

Dlatego nie jestem pewien, dlaczego domyślnym typem nie jest virtualbox. W każdym razie to jest warte strzału, jak sądzę. Dalsze wchodzenie do dokumentów wydaje się być błędem w wirtualnym polu typu wyjaśnionym w dokumentach. Jeśli zamierzasz używać typu synchronizacji skrzynki wirtualnej, postępuj zgodnie z steps here.

+1

2-kierunkowa synchronizacja działa z 'config.vm.synced_folder" foo ","/bar "'. Mam vagrant 1.9.2 i VirtualBox 5.1.22. Myślę, że działa również dwustronny program operacyjny. Ale problem polega na tym, że katalog guest zaczyna się pusty po wprowadzeniu konfiguracji (jak zauważa @ frédéric-henri, oryginalny katalog nie jest nadpisywany, ale "ukryty" - nie wiem wystarczająco dużo o systemach plików lub innych rzeczach związanych z wiesz, co to znaczy). –

+0

2-kierunkowe synchronizowanie nie działa z rsync zgodnie z tym wydaniem z Vagrant git repo https://github.com/hashicorp/vagrant/issues/3062 –

+0

'type:" virtualbox "' need jest zainstalowany VirtualBox Guest Additions –

2

Ustaliłem, że problem nie jest taki, że config.vm.synced_folder '../src', '/home/vagrant/src' zastępuje/home/vagrant/src. Problem polega na tym, że home/vagrant/src staje się nowym, odmiennym typem katalogu w systemie plików, który jest pusty. Tak więc po skonfigurowaniu katalogu współdzielonego wystarczy go ponownie zaludnić. Więc ...

  1. na gości: sudo mv home/vagrant/src home/vagrant/src-back
  2. halt gość
  3. dodać nową zsynchronizowanej folder Vagrantfile: config.vm.synced_folder '../src', '/home/vagrant/src'
  4. początek gość
  5. na gości: sudo mv home/vagrant/src-back/* home/vagrant/src-back/

i rzeczy powinien dobrze działać w przyszłości.

1

pracuję z włóczęgi z tej struktury:

Vagrantfile 
MyCode.php 

i Vagrantfile zawiera: "".

config.vm.synced_folder "/ włóczęga"

to oznacza, że ​​MyCode.php jest widoczny wewnątrz maszyny włóczęgi w folderze/vagrant. Mogę edytować ten plik zarówno z maszyny Vagrant (gość), jak iz mojego komputera (hosta).

1

Możesz użyć rsync z Vagrant, ma wbudowaną obsługę. Oto link do dokumentacji. O ile ignorowanie nadmiernych plików w miejscu docelowym (prawdopodobnie zachowanie domyślne) jest banalnie proste, nadal można zsynchronizować dokładnie, chroniąc pliki docelowe za pomocą ochrony filter.

W przeciwieństwie do montażu, rsync musi być wyzwalany ręcznie. Jednak nadal można korzystać z funkcji Vagrant rsync-auto udokumentowanej jako here dla prostego zegarka systemu plików.

1

Brzmi jak chcesz udostępnić folder od maszynę gość z komputera hosta, który jest swego rodzaju przeciwieństwem tego, co zrobić normalne foldery współdzielone.

Czy myślisz o udostępnieniu NFS na gościu, a następnie za pomocą vagrant-triggers, aby zamontować udział od gościa na hoście.

Pierwsze uruchomienie instalując Vagrant-wyzwalaczy:

vagrant plugin install vagrant-triggers

Następnie mają Vagrantfile tak:

# 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 

To nietypowa konfiguracja, ale ja testowałem to teraz z hostem Ubuntu oraz gość Debiana i wydaje się, że działa - YMMV.

0

użyłem następujące siekać do rsync folder od gościa do hosta:

  • pierwsze, uzyskać konfigurację SSH do pudełka i zapisz go na ssh_config

$ vagrant ssh-config > ssh_config

  • Następnie użyj rsync folderu gościa z powrotem do hosta o podanej konfiguracji

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

on pracował dla mnie i mam nadzieję, że pracuje dla Ciebie!

Pozdrowienia

-- 
    =^.^=