LoginSignup
1
3

More than 3 years have passed since last update.

【開発環境】Operation not permittedでphp artisan migrateできないときは権限周りを確認!

Posted at

permission.png

どうも、たかふみです。

現在携わっているシステムの開発が終わり、「さぁそろそろステージング環境の準備をしようかなぁ」と思い、テーブルを作成するコマンド php aritisan migrate を実行しようとしたそのとき。

Operation not permitted

「migrateができない!」

今日の記事は、AWSのEC2を使って用意したステージング環境でmigrateができない問題を解決します!

解決策

自分が所有ユーザーになる&所有グループに書き込み権限を与える

やったこと

1. まずエラーメッセージを読む。

UnexpectedValueException  : The stream or file "/var/www/mcfhfs/storage/logs/laravel-2019-11-20.log" could not be opened: failed to open stream: Permission denied
  at /var/www/mcfhfs/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:111
    107|             restore_error_handler();
    108|             if (!is_resource($this->stream)) {
    109|                 $this->stream = null;
    110|
  > 111|                 throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: '.$this->errorMessage, $this->url));
    112|             }
    113|         }
    114|
    115|         if ($this->useLocking) {
  Exception trace:
  1   Monolog\Handler\StreamHandler::write()
      /var/www/mcfhfs/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php:120
  2   Monolog\Handler\RotatingFileHandler::write()
      /var/www/mcfhfs/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php:42
  Please use the argument -v to see more details.

エラーメッセージを見てみると「ログファイルへの書き込み権限がありません。」となっていました。どうやらログファイルへの書き込み権限が無いようです。

2. ログファイルの権限を確認&変更

ls -la で権限を確認すると、rw- - r -- - r --となっていました。

この場合「所有ユーザ(読/書) - 所有グループ(読) - その他のユーザ(読)」であり、
僕は所有ユーザーではなく、所有グループに属するので読み取り権限しかありません。

「そしたら、所有グループの権限に書き込み権限(w)を追加すれば良いのでは?」

ということでchmod 664 laravel-2019-11-20.log を実行。
結果、 Operation not permitted が表示されました。

調べてみると、ファイルの権限はファイル所有者でないと変更できないようです。
(参考:https://marunouchi-tech.i-studio.co.jp/3341)

3. ファイルを作り直す

「そしたら、自分がファイルの所有ユーザーになればいいのでは?」

該当のログファイルを一旦削除して再度作成。
ファイル所有者が自分になっていることを確認した後、再度migrateを実行。

php artisan migrate:fresh
Dropped all tables successfully.
Migration table created successfully.

「成功!」

4. webサーバーからも書き込みができるように権限を変更

これで解決だと思い、ブラウザからステージング環境に接続してページを表示しようとしたところ、再び「ログファイルに書き込み権限がありません」との表示がされました。
どうやらwebサーバーからの書き込み権限を与える必要があるようです。

chmod 664 laravel-2019-11-20.log
ls -la
-rw-rw-r--

これで所有ユーザー、所有グループに書き込み権限を付与できたので再度サイトへアクセス。無事に表示されていました!

■まとめ

・権限はファイル所有者でないと変更できない。
・webサーバーからの書き込み権限付与を忘れずに!
・「Operation not permitted」「Permission denied」のときには権限を確認!

今まで権限でエラーが起きたことがなかったので、これを機に知ることができて良かったです。これでPermission deniedが出ても安心ですね。それでは!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3