【问题标题】:503 Unavailable Service on Form Submit503 表单提交时服务不可用
【发布时间】:2019-10-25 07:14:36
【问题描述】:

我用 PHP Laravel 和 Vue JS 创建了一个项目。并使用 Amazon AWS 的基本计划对其进行配置。一开始,它运行良好,没有任何问题。但是现在,当我尝试添加新的博客文章或编辑已存在的包含大量内容的博客文章时,它显示 503 Service Unavailable 错误。我为博客开发了如下所示的算法。

表格:

  1. blogs - 此表用于存储文章的轻量级数据,如标题、特色图片、URL 等。

  2. posts - 此表用于存储帖子的实际内容。它包含三列,如博客 ID、内容、顺序。我在这里 将文本数据类型用于将接受近 70k 个字符的内容。

算法: 当我提交一篇博文时,首先它会在 blogs 表中创建一个包含轻量级数据的行。之后,实际的帖子内容将被拆分为一个数组,每个项目包含 65k 个字符。每个项目都将作为新行存储在帖子表中,并在 blogs 表中创建博客 ID。在检索帖子时,它将加入帖子表中的行并显示实际帖子。

注意:上述过程运行良好,没有任何问题。

问题: 实际问题是当我尝试添加新帖子或使用图像编辑现有帖子时突然开始显示 503 错误(产生大量字符),即使帖子正在博客表中创建并且添加的字符数量不完整在帖子表中,同时添加其余内容时显示 503 错误。

注意:即使它在我的本地主机和另一个 Bluehost 服务器上也能正常工作。

我尝试使用 25k 个字符减少内容拆分,但结果显示相同。

if($request->hasFile('image')) {
            $filenameWithExt = $request->file('image')->getClientOriginalName();
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            $extension = $request->file('image')->getClientOriginalExtension();
            $fileNameToStore = 'post_' . time() . '.' .$extension;
            $path = public_path('uploads/posts/' . $fileNameToStore);
            if(!file_exists(public_path('uploads/posts/'))) {
                mkdir(public_path('uploads/posts/'), 0777);
            }
            Image::make($request->file('image')->getRealPath())->resize(900, NULL)->save($path);
        }else {
            $fileNameToStore = NULL;
        }

        if($request->hasFile('author_image')) {
            $filenameWithExt = $request->file('author_image')->getClientOriginalName();
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            $extension = $request->file('author_image')->getClientOriginalExtension();
            $authorImage = 'author_' . time() . '.' .$extension;
            $path = public_path('uploads/authors/' . $authorImage);
            if(!file_exists(public_path('uploads/authors/'))) {
                mkdir(public_path('uploads/authors/'), 0777);
            }
            Image::make($request->file('author_image')->getRealPath())->resize(50, 50)->save($path);
        }else {
            $authorImage = NULL;
        }

        $blog = Blog::create([
            'title' => $request->title,
            'image' => $fileNameToStore,
            'category' => $request->category,
            'meta_description' => $request->meta_description,
            'meta_keywords' => $request->meta_keywords,
            'url' => $request->url,
            'meta_title' => $request->meta_title,
            'author_name' => $request->author_name,
            'author_image' => $authorImage,
            'author_linkedin' => $request->author_linkedin,
            'popular' => $request->popular
        ]);

        $contents = str_split($request->post, 65000);
        $i = 1;
        foreach($contents as $key => $item)
        {
            Post::create([
                'post' => $blog->id,
                'content' => $item,
                'order' => $i
            ]);

            $i++;
        }

我希望输出重定向回博客页面,并显示成功消息“帖子已成功创建”,但实际结果是

服务不可用 由于维护停机或容量问题,服务器暂时无法满足您的请求。请稍后再试。

【问题讨论】:

  • 查看您的应用程序日志...和Image::make 您在使用intervention/image 吗?根据我的经验,对于大图像(取决于处理引擎),它们确实需要相当大的内存,如果它太大,可能会导致托管限制您的进程。请检查亚马逊和您的 bluehost 上的服务器规格。
  • 是的,我正在使用干预/图像来调整将存储在博客表中的博客文章的特色图像的大小。它现在工作正常,数据存储在 blogs 表中。但是当数据被推送到帖子表中时,就会出现问题。添加到帖子内容中的图像将作为编码字符串存储在数据库中。
  • 您有权访问服务器日志吗?或者你能打开PHP错误报告吗?
  • 不,我无权访问服务器日志,Laravel 会将 PHP 错误记录到日志文件中,但在该文件中,没有关于此显示的错误。

标签: php mysql laravel amazon-web-services


【解决方案1】:

您似乎需要在php.ini 中增加post_max_sizeupload_max_filesize 的值。 AWS 指南:https://aws.amazon.com/ru/premiumsupport/knowledge-center/wordpress-themes-2mb/

我还建议对您的案例使用事务。这将有助于避免部分创建的帖子。 https://laravel.com/docs/5.8/database#database-transactions

【讨论】:

  • 感谢您的回答,我发现限制设置为租用值,现在我根据本地主机更改了配置并使用“service httpd restart”命令重新启动服务器。但现在它也显示出同样的错误。我有什么需要改变的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 2016-07-29
  • 2020-05-26
  • 2018-03-09
相关资源
最近更新 更多