【问题标题】:Laravel and Azure Error: Internal Server ErrorLaravel 和 Azure 错误:内部服务器错误
【发布时间】:2018-01-16 08:56:45
【问题描述】:

我在 Microsoft Azure 上有一个使用 Laravel 5.2 和 PHP 7 的应用服务。我遇到的问题是,有时我在浏览网站时会收到错误:

由于发生内部服务器错误,无法显示此页面

这是随机发生的,但是当它发生时它会阻塞路线,例如我正在浏览地址 http://elsitio.com/details/12 没有问题,然后我再次单击它会引发错误。

为了摆脱这个错误,我必须重新启动应用服务,它会正常工作,所以我认为它与应用中的视图缓存有关。

除了设置 Laravel .env 我没有做任何配置。

使用 phpinfo 我发现该站点似乎在 FastCGI 上运行,但我不太确定,因为显示的错误似乎是由 IIS 管理的。

我的问题是:

  1. 对可能导致问题的原因有什么想法吗?

  2. 如何在不重新启动应用服务的情况下重新启动 FastCGI/IIS 服务,例如在 Linux 上的 Apache 中将是 service httpd restart

更新 1

这是一个非常奇怪的错误,有时我会收到缺少某些组件的错误:Interface 'Illuminate\Contracts\Queue\QueueableCollection' not found 然后我执行$: composer install 并且它开始工作,然后我重新加载页面并收到另一个与缺少组件相关的错误.

如果我更改 PHP 版本,它会再次开始工作:(.

【问题讨论】:

  • 它与您在 env 文件 APP_DEBUG = false 中设置的接缝相接,您看不到实际错误。另外最好在问题中添加您的.env(没有有关数据库连接的信息)
  • APP_DEBUG 设置为 true :)

标签: php laravel azure laravel-5 azure-app-service-envrmnt


【解决方案1】:

通常,当您收到 500 http 错误时,这意味着您可能会发生 php 致命错误。您可以启用显示错误配置来诊断错误。同时,考虑到您遇到随机问题,您也可以启用错误日志,以跟踪问题。

您可以参考Info About PHP Fatal Error and Error Log on Azure Website 了解更多信息。也可以参考How to: Change the built-in PHP configurations

如有任何疑问,请随时告诉我。

【讨论】:

  • 这是一个非常奇怪的错误,有时我会发现 Laravel 的某些元素丢失了:Interface 'Illuminate\Contracts\Queue\QueueableCollection' not found 然后我执行 $: composer install 并开始工作,然后再次工作,然后我重新加载页面,我得到另一个错误。如果我更改 PHP 版本,它会再次开始工作:(
【解决方案2】:

在迁移到 Azure 时遇到问题,当我运行 composer install 时 Composer 不会提取某些文件。尝试手动下载文件 from here 并运行composer dump-autoload

【讨论】:

    【解决方案3】:

    如果一切都正确,只需执行以下操作。

    1. public 下创建web.conf
    2. 复制下面的代码。

      <configuration>
        <system.webServer>
          <rewrite>
            <rules>
              <rule name="Imported Rule 1" stopProcessing="true">
                <match url="^(.*)/$" ignoreCase="false" />
                <conditions>
                  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Redirect" redirectType="Permanent" url="/{R:1}" />
              </rule>
              <rule name="Imported Rule 2" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions>
                  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                  <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="index.php" />
              </rule>
            </rules>
          </rewrite>
        </system.webServer>
      </configuration>
      

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      相关资源
      最近更新 更多