こんな状況

  • synced_folder を使ってホスト/ゲスト間でファイル共有している.
  • 共有ファイルの一部を DocumentRoot 配下にシンボリックリンクとして置いている.
  • この共有ファイルはPHPのアプリケーションで,session情報をファイルに書き込む処理を行っている.
  • 書き込むファイルはPHPアプリケーション内に含まれている.
/synced
  php-applications/ (共有しているPHPアプリケーション)
/htdocs (Document Root)
  php-applications/ (↑のsymbolic link)
    tmp/sessions (sessionを書き込むところ)

synced配下のphp-applicationsをシンボリックリンクじゃなくて普通にコピーだとsessionを書き込むことができた.つまり,共有ファイルをDocumentRoot配下に置くというのがダメだったらしい.ちなみにハードリンクしようとしたら「無効なクロスデバイスリンクです」というエラーがでてうまくいかなかった.マウントされているdisk/partitionが異なる場合にでるらしい.symbolic linkで上手くsession情報が書き込めないのもそのあたりが原因なんだろうか?

解決方法

今考えている解決方法としてはrsyncを使って同期させる方法.ホスト→ゲストで共有するやり方が一般的みたい.
ということで, DocumentRoot 配下に/sharedのファイルをrsyncするような形にしようかなと思っているのだけれど,わざわざ vagrant rsync-auto みたいなコマンドを叩いておかないと同期しないらしいので,そのあたり一手間増えるのが面倒だし, VMware Fusion を使っている今現在の環境ではそういうことをしなくても良いので,微妙なところ.

使っているバージョン

Mac OS X用の現時点での最新版

  • Vagrant: 1.6.3