上传图片在localhost上运行完美,在实时网站上无法正常运行(Google App Engine和laravel) [英] uploading images work perfect on the localhost, won't work on the live site(google app engine and laravel)

查看:72
本文介绍了上传图片在localhost上运行完美,在实时网站上无法正常运行(Google App Engine和laravel)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的项目在本地主机上运行良好,并且一旦我使用命令gcloud app deploy将其部署到实时服务器上.部署可能运行成功,一旦我尝试在实时站点上上传图像,它就会引发错误500,并且当我检查日志时,出现以下错误:

my project is working perfectly on the local host and as soon as i deploy it to the live server using the command gcloud app deploy. The deploy maybe runs successful and as soon as i try uploading an image image on the live site it throw error 500 and when i check my logs i got the following errors:

ErrorException: mkdir(): Permission denied
at mkdir (/app/app/Http/Controllers/Admin/Service/AddServiceController.php:74)
at App\Http\Controllers\admin\Service\AddServiceController->store (/app/app/Http/Controllers/Admin/Service/AddServiceController.php:74)
at call_user_func_array ([internal function])
at Illuminate\Routing\Controller->callAction (/app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54)
at Illuminate\Routing\ControllerDispatcher->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45)
at Illuminate\Routing\Route->runController (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:225)
at Illuminate\Routing\Route->run (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:182)
at Illuminate\Routing\Router->Illuminate\Routing\{closure} (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:681)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Auth\Middleware\Authorize->handle (/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php:45)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at App\Http\Middleware\LastUserActivity->handle (/app/app/Http/Middleware/LastUserActivity.php:26)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Routing\Middleware\SubstituteBindings->handle (/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:76)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\View\Middleware\ShareErrorsFromSession->handle (/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Session\Middleware\StartSession->handle (/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:56)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\EncryptCookies->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Routing\Router->runRouteWithinStack (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:683)
at Illuminate\Routing\Router->runRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:658)
at Illuminate\Routing\Router->dispatchToRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:624)
at Illuminate\Routing\Router->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:613)
at Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure} (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:165)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:63)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fruitcake\Cors\HandleCors->handle (/app/vendor/fruitcake/laravel-cors/src/HandleCors.php:36)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fideloper\Proxy\TrustProxies->handle (/app/vendor/fideloper/proxy/src/TrustProxies.php:57)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:140)
at Illuminate\Foundation\Http\Kernel->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:109)
at {main} (/app/public/index.php:55)

第二次错误提示:

Intervention\Image\Exception\NotWritableException: Can't write image data to path (/app/public/uploads/services/1593957045.jpeg)
at App\Http\Controllers\admin\Service\AddServiceController->store (/app/vendor/intervention/image/src/Intervention/Image/Image.php:150)
at call_user_func_array ([internal function])
at Illuminate\Routing\Controller->callAction (/app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54)
at Illuminate\Routing\ControllerDispatcher->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45)
at Illuminate\Routing\Route->runController (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:225)
at Illuminate\Routing\Route->run (/app/vendor/laravel/framework/src/Illuminate/Routing/Route.php:182)
at Illuminate\Routing\Router->Illuminate\Routing\{closure} (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:681)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Auth\Middleware\Authorize->handle (/app/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php:45)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at App\Http\Middleware\LastUserActivity->handle (/app/app/Http/Middleware/LastUserActivity.php:26)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Routing\Middleware\SubstituteBindings->handle (/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:76)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\View\Middleware\ShareErrorsFromSession->handle (/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Session\Middleware\StartSession->handle (/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:56)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Cookie\Middleware\EncryptCookies->handle (/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Routing\Router->runRouteWithinStack (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:683)
at Illuminate\Routing\Router->runRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:658)
at Illuminate\Routing\Router->dispatchToRoute (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:624)
at Illuminate\Routing\Router->dispatch (/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php:613)
at Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure} (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:165)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\TransformsRequest->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:63)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fruitcake\Cors\HandleCors->handle (/app/vendor/fruitcake/laravel-cors/src/HandleCors.php:36)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Fideloper\Proxy\TrustProxies->handle (/app/vendor/fideloper/proxy/src/TrustProxies.php:57)
at Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure} (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167)
at Illuminate\Pipeline\Pipeline->then (/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103)
at Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:140)
at Illuminate\Foundation\Http\Kernel->handle (/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:109)
at {main} (/app/public/index.php:55)

我的控制器:

        $service = new Add_Service;
        // Handle the user upload of avatar
        if($request->hasFile('service')){
            $image = $request->file('service');
            $filename = time().'.'.$image->getClientOriginalExtension();

            $destinationPath = 'uploads/services/';
            if (!file_exists(storage_path($destinationPath))) {
                mkdir(storage_path($destinationPath), 755, true);
            }

            Image::make($image->getRealPath())->resize(1000, 667, function ($constraint) {
                $constraint->aspectRatio();
            })->save($destinationPath.$filename);

            $service->image = $filename;
            $service->service_name = ucfirst(request('service_name'));
            $service->desc = ucfirst(request('service_desc'));
            $service->save();
         }

我的作曲家:

       "post-install-cmd": [
            "chmod -R 755 bootstrap\/cache",
            "php artisan cache:clear"
        ]

请协助.我不确定我在做什么错.

please assist. i'm not sure what i'm doing wrong here.

推荐答案

更改注释/app/public/uploads目录的权限(如注释中提到的@STA)将解决此问题,您可以通过在Cloud中使用此命令来解决此问题.外壳:

Changing the permissions of your /app/public/uploads directory, as @STA mentioned in the comments, will fix the issue and you can do it by using this command in Cloud Shell:

sudo chmod -R a+w <directory>

但是,由于App Engine在其之上运行,因此这可能不是永久修复,也不是使用App Engine的最佳做法.

However, this will likely not be a permanent fix nor a best practice on the use of App Engine, because of the structure that App Engine runs on top of.

您可以在此社区答案中看到

App Engine是托管VM,这意味着即使您使文件夹在实例上可写,如果App Engine扩大规模或必须销毁您修改的实例,您仍需要在新实例上进行更改.

App Engine is a managed VM, this means that even if you make the folders writable on an instance, if App Engine scales up or has to destroy the instance you modified, you would need to make the changes on the new instances.

因此,如果您正在使用此文件夹存储临时文件,我建议您选择以下一种方式:

So, if you are using this folder to store temp files, I would recommend that you either:

  • 开始使用其他目录来存储它,例如/tmp -使用这种方法,您还将面临前面提到的扩展问题,但对于临时文件,它会满足您的需求.

  • Start using a different directory to store it, like /tmp - with this approach you will also face the scaling up issue previosly mentioned but for temp files, will suit your needs.

使用云存储桶来存储持久性文件,这些文件将可供您的所有实例使用.这是扩展应用程序的理想解决方案.您可以按照以下 link 此处您可以获取有关如何将文件从Cloud Storage上传到PHP应用程序的示例.

Use Cloud Storage Buckets to store persistent files that will be available for all your instances to use. This is the ideal solution for a scaling app. You can find more details on how to create this by following this link and here you can get an example on how to upload files from Cloud Storage into your PHP app.

希望这会有所帮助.

这篇关于上传图片在localhost上运行完美,在实时网站上无法正常运行(Google App Engine和laravel)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆