Vagrantを使用して、チームに共通の開発環境を提供します。ホストはまったく異なります。
VMの内部では、Linuxを実行します。
これまでのところ、すべてが順調です。
今、私たちのアイデアは、各開発者が選択したIDEを使用できるようにするというものでした。したがって、ホストとVMの間でソースコードを共有する同期フォルダーを導入しました。これは基本的に同様に機能します…シンボリックリンクを除いて。
ソースコードの内部には、実際にはいくつかのシンボリックリンクがあります。これはVM内のLinux内では問題ではありませんが、ホストとしてのWindowsでは問題が発生します。 notできることは、シンボリックリンクを削除することだけです。したがって、これに対処する別の方法が必要です。
これまで、いくつかのオプションを試しました。
symlink has no referent
(シンボリックリンクごとに1つのエラー)を示すいくつかのエラーでクラッシュします。共有フォルダ内のマルチプラットフォームホストとシンボリックリンクで問題が発生するのは、私たちがこの惑星で唯一または初めてだとは想像できません。
シンボリックリンクを維持しながら、異なるホストオペレーティングシステムを使用できるように、この問題をどのように解決できますか?
Virtualboxでは、セキュリティ上の理由から、共有フォルダーへのシンボリックリンクは許可されていません。シンボリックリンクを有効にするには、Vagrantfileのvmプロバイダー構成ブロックに次の行を追加する必要があります。
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
さらに、Windowsでは、管理者権限を持つvagrant upをシェルで実行する必要があります。回避策は必要ありません。
受け入れられた答えは良くありません。質問では、syncedフォルダー、notsharedフォルダー。提案されたソリューションは、rsynced(not shared)フォルダーには影響しません。そして、OPがsharedフォルダーを使用していたとしても、受け入れられた答えの提案は すでに1.1のvagrantに統合されていて、 OPが質問を投稿する15か月前にリリースされました (言うまでもなく VirtualBoxの共有フォルダーは非常に遅いです )。
これと同じ問題が発生しました。OSXでは、symlink has no referent
rsyncエラーが発生しました。特定のrsync引数をvagrantfile
に追加することで、個人的に解決できました。
config.vm.synced_folder ".", "/var/www", type: "rsync", rsync__args: ["--verbose", "--archive", "--delete", "-z"]
私も この問題を開きました vagrantのgithubで、rsync__args
のデフォルト値(具体的には、デフォルト引数の1つである--copy-links
、少なくとも壊れたシンボリックリンクのコピーに関する限り、別の--archive
を壊しているようです)。
npm install
の実行エラーを解決するために、これらすべてのオプションを試しました。
管理者プロンプトでvagrantを実行し、vm(vagrant reload
)をロードするだけで問題が解決しました。
私は戻って、VagrantfileからSharedFoldersEnableSymlinksCreate
構成を削除しましたが、それでも問題ありませんでした。
デフォルトの同期フォルダタイプはvboxsf
です。多数のファイル/ディレクトリで既知のパフォーマンスの問題があり、シンボリックリンクとハードリンクのサポートがありません(チケット 818 -7年以上前のバグを参照) )。使用しないでください。
rsyncタイプの同期フォルダーが最適な選択です。
あなたはそれがクラッシュしたと言いましたが、どのバージョンのrsyncを実行していますか? brewを使用して3.1.0に更新してみてください。OOTBが古すぎる(2.x)ため、問題が発生する可能性があります。
1時間いじって、いくつかの異なるソリューション(vagrant-vbguest
、Marvinが提案した修正)を試した後、VirtualBox 4.8.10、Vagrant 1.5.1で動作する共有フォルダーのシンボリックリンクを取得できませんでした。
より簡単な解決策は、別の共有フォルダーを構成し、RubyのFile.readlink
を使用して、基礎となるパスを読み取ることです。
config.vm.synced_folder File.readlink('SYMLINK'), "/mount/path"
Vagrantfileに次の行を追加します。
config.vm.provider "virtualbox" do |v|
v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end
これは私のために働いたONLY virtualbox 6.0.8から6.0.4およびvagrant 2.2.4から2.2.1にダウングレードした後。
「管理者として実行」でターミナルを開くと(Windows 10でgit bashを使用します)。
git bashの変更も試してください:プロジェクトファイル:$ vim .git/config change to symlinks = 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