Vagrant + Chefっていう組み合わせの環境を普段から使わせていただいているんですが、よくなんかよくわからないエラーが起きるようになったんですよね。アップデートのスクリプト通そうとすると通らないっていう。
前の記事の最後の方にも書いてたんですけどsynced_folderに原因がある感じ。
WordPressをVagrant環境にらくらくインストールする。 - VCCW
というか本当に悪の枢軸なんじゃないかってくらい毎日起きてたんですね。
いつも何かしらできるだろうとか思ってたんですけど、自分はぜんぜんVagrantにもChefにも明るくないのでお手上げかなって。
そんなぼくが救世主として見つけたのが
vagrant-trigger
原因?と解決策?
原因を探っていくうちに、GitHubのVagrantのISSUE #5199にたどり着きました。
Problem reloading Chef shared folders #5199
ざっくり内容を3行で書くと。
synced_folderのキャッシュの問題だわ
synced_folder消してくれ。
手動で毎回消すの面倒なやつはvagrant-trigger使ってくれ。
と解釈できる(超訳)
設定方法
vagrant-triggerのインストール
何はともあれここから。
vagrant plugin install vagrant-triggers
Vagrantfileにこれを書く。
Vagrant.configure("2") do |config|
config.trigger.after [:reload, :halt], stdout: true do
`rm .vagrant/machines/default/virtualbox/synced_folders`
end
end
Vagrantfileにこのコードを書く。ディレクトリ構成は各プロジェクトに合わせてくださいね。
これでvagrant halt
かvagrant reload
をトリガーにして、synced_folderを消してくれる。
いちいち自分の手で消さなくて済むのがうれしい。
自分はあんまりvagrant suspend
しないから書いてないのですが、 トリガーに加えてもいいのかもしれない。
いま携わっているプロジェクトは微妙に構成が違うので、サンプルのコードに変更を加えて導入したのですが、実際に問題は発生しなくなり、かなり便利になりました。
vagrant-triggerってもしかしてかなり便利じゃない?
なんか超便利そうなんでこういう使い方あるよって教えてください。
よりよい方法ある?
なお、もっとよい解決策を知っている方いるなら随時募集してます。
教えてください!
余談
Vagrant+Ansibleでも似たようなことが発生すると、調べている途中で見た気がしますが、きちんとしたことは知りませんー。
あと余談ですけど、最初はvagrant-triggerでVagrant+Chef環境をもっと快適にとかそういうタイトルにしようと思ったけど、完全に釣りになるからやめました。