php - Laravel ``$user->can("...")`` 抛出服务器错误 500
问题描述
我在 AWS (EC2) 上使用 Laravel API 托管 SPA。当您填写此表单时:http ://ec2-52-59-214-55.eu-central-1.compute.amazonaws.com/register (随意这样做),服务器会抛出一个错误并响应代码 500,就在$user->can("...")
调用方法的地方。我在本地开发了该应用程序,并且在那里一切正常。
当地环境:
Windows 10 / XAMPP - Apache 2.4.41
PHP 7.4.4
Laravel 7.5.2
服务器环境:
Ubuntu 18.04 / Apache 2.4.29
PHP 7.4.6
Laravel 7.5.2
它使用 spatie/laravel-permission 进行角色管理,这也影响can
了 Laravel 框架提供的方法。
这是导致错误的代码:
echo "Before store<br>";
if($user->can("store files")) { echo "Inner store";
// Store avatar
if(isset($data["avatar"])) {
if(!$data["avatar"]->isValid()) {
return reponse(null, 422);
}
// Check if avatar is new
$current_avatar = $user->getAvatarAttribute();
$store_images = get_new_files([$data["avatar"]], [$current_avatar]);
if(isset($store_images[0])) {
// Create asset for avatar
$new_avatar = create_asset([
"file" => $store_images[0],
"user_id" => $user->id,
"type" => "avatar"
]);
$new_avatar->save();
}
}
}
echo "After store<br>";
我猜这里的错误意味着脚本if($user->can("...))
一被调用就失败了。
你知道如何解决这个问题吗?
解决方案
日志记录错误相当普遍,尤其是在配置为每日日志时。
https://laravel.com/docs/7.x/logging#configuration
请特别查看“配置单一频道和每日频道”部分,因为这允许在创建时设置日志文件的权限。
您可以暂时更改日志的权限,如下所示:
sudo chmod 644 storage/log/.
推荐阅读
- java - SwipeRefreshLayout 不遵守约束
- python - mongo_client TypeError:“模块”对象不可调用
- javascript - 在角度 6 我尝试使用 id 属性,但在绑定时它不适用于强标签和 innerhtml
- c# - GeoCoordinateWatcher.TryStart 在 C# 中无法正常工作
- vba - VBA 对象实例如何判断它是否是默认实例?
- c# - 在数字变为字母的地方拆分字符串,反之亦然
- git - git head 与 master 分离
- postgresql - PostgreSQL 中的交叉表/动态透视
- graphql - GraphQL 合并来自多个 REST 调用的数据
- javascript - 如何避免javascript中的完整内存错误