人生の恥は書き捨て

プログラムとかいろいろ

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の実行ユーザーとここで設定しているユーザーを同じにすれば、
所有権の問題も起きず正しく動きます。

自分の場合はhttpd.conf の user と group を vagrant にしてます。