当我尝试调用CLI命令时,我在使用EC2实例时遇到了一些问题。我正在使用Laravel,但我不能确定它是Laravel问题还是EC2。
当我进入我的EC2实例时,我运行以下laravel命令来迁移我的数据库:
php artisan migrate
我收到以下错误:
PHP致命错误:未捕获的异常' UnexpectedValueException'同 消息'流或文件 " /var/app/current/storage/logs/laravel.log"不能打开: 未能打开流:权限被拒绝'在 /var/app/current/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107
然后我运行sudo php artisan migrate
并得到一个完全不同的错误:
[PDOException] SQLSTATE [HY000] [2002]没有这样的文件或目录
然后我再次运行php artisan migrate
,这一切都按预期工作!
任何人都有任何想法导致这种行为或我如何找错?
注意:EC2是运行PHP 5.5的64位Amazon Linux 2016.03 v2.1.4
答案 0 :(得分:3)
只需将bootstrap和storage的权限更改为777。
[ec2-user@ip-172-31-42-2 current]$ sudo chmod -R 777 storage
[ec2-user@ip-172-31-42-2 current]$ sudo chmod -R 777 bootstrap
答案 1 :(得分:0)
这里被接受的答案会带来一些严重的安全风险-将chmod设置为777可使系统上的任何人读取,修改和执行这些目录中的任何内容。如果您的存储文件夹中包含上载内容,则该文件可能会特别具有破坏性。有关chmod 777
不好的原因的更多详细信息,请参见this post。
This post提供了更安全的解决方案,Laravel文档中也包含该解决方案。简短的版本是您应将Laravel文件夹的所有权授予Apache,然后将用户添加到Apache组(通常都是www-data
:
sudo chown -R www-data:www-data /path/to/your/project/vendor
sudo chown -R www-data:www-data /path/to/your/project/storage
然后
sudo usermod -a -G www-data your-user-name