我在AWS(EC2)上托管了带有Laravel API的SPA。当您填写以下表单:http://ec2-52-59-214-55.eu-central-1.compute.amazonaws.com/register(随意这样做)时,服务器会在调用$user->can("...")
方法的时候抛出错误,响应码为500。我在本地开发了该应用程序,并且在那里一切正常。
本地环境:
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进行角色管理,这也影响了Laravel框架提供的can
方法。
这是导致错误的代码:
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("...))
被调用后脚本立即失败。
您知道如何解决该问题吗?
答案 0 :(得分:0)
记录错误非常普遍,尤其是在配置为每日日志时。
https://laravel.com/docs/7.x/logging#configuration
具体查看“配置单通道和每日通道”部分,因为这允许在创建时设置日志文件的权限。
您可以临时更改日志的权限,如下所示:
sudo chmod 644 storage/log/.