Vagrant+Laravelでパーミッションで詰まった
問題
Laravelでapp/storage以下のファイルの権限が足りていない場合、
Error in exception handler.
などのエラーが出る場合があります。
この場合は、chmod 777 -R app/storage
とかすれば大丈夫なんですが…。
vagrantの共有フォルダを使って開発している場合、
chmodが思ったような動きをしない場合があります。
別にLaravelに限った話じゃないんですけどね。
そのため正しく設定しないとlogファイルが生成されるたびにこのエラーが出たりして、使い物になりません。
また、共有ファイルのオーナーが中身を共有する際に自動で書き換えられるため、
apacheのユーザーと共有ファイルの所有権を持つユーザーに不整合が起きて、
logファイルのパーミッションでハマります。
まとめると、
・共有時にファイルのパーミッションが書き換わりハマる
・共有時にファイルの所有権が書き換わりハマる
ことがあるということです。
解決策
Vagrantには設定でconfig.vm.synced_folderという項目があります。
これで共有フォルダの所有者や、共有するフォルダを設定できます。
Vagrantfileに
config.vm.synced_folder ".", "/vagrant", :owner => 'vagrant', :group => 'vagrant', mount_options: ['dmode=777','fmode=755']
のように記述すると、
明示的にユーザーグループとユーザー、それとフォルダの権限を指定できます。
そしてApacheの実行ユーザーとここで設定しているユーザーを同じにすれば、
所有権の問題も起きず正しく動きます。