异常处理程序中的错误。 - 拉拉维尔
Posted
技术标签:
【中文标题】异常处理程序中的错误。 - 拉拉维尔【英文标题】:Error in exception handler. - Laravel 【发布时间】:2014-06-04 21:37:43 【问题描述】:这是一个与 Laravel 安装相关的问题。我有一个面向公众的 Unix 服务器设置:
<VirtualHost *:80>
ServerAdmin webmaster@mydomain.org
DocumentRoot "/var/www/mydomain"
ServerName mydomain.org
ServerAlias www.mydomain.org
ErrorLog "/var/log/mydomain.org-error_log"
CustomLog "/var/log/mydomain.org-access_log" common
</VirtualHost>
我可以从 /var/www/mydomain 中很好地提供文件,即http://mydomain.org/test.php,其中 test.php 包含:
<?php echo 'test';
工作正常。
在 bash 中,通过 Composer 安装 Laravel 并查看文件:
# ls /var/www/mydomain/my-laravel-project
.gitattributes CONTRIBUTING.md artisan composer.json phpunit.xml readme.md vendor
.gitignore app bootstrap composer.lock public server.php
所以当我浏览到:
http://mydomain.org/my-laravel-project/public/
为什么我的申请报告:
Error in exception handler.
在浏览器中 - 在空白屏幕上?我期待看到 Laravel 启动画面。
此外,日志文件也没有透露任何内容。
【问题讨论】:
PHP 版本?你能在/var/log
中检查你的服务器日志,看看他们有什么要说的吗?
Laravel 在app/storage/logs
中的错误日志呢?所有的存储目录都是可写的吗?
@Jason 就像你说的 - 这是存储目录。一个 chmod -R 757 存储,我可以点击启动屏幕。 +1,谢谢。
【参考方案1】:
很久以前,这股潮流已经过去了,但我还有一条关于“异常处理程序中的错误”的建议。
我在运行“php artisan”时遇到了这种情况,这是评估您的环境是否正常工作的好方法。
我运行了它,它给了我这个错误,直到我在我的项目的根目录中编辑了 artisan 文件并添加了一个 try catch 语句,我才能查明问题:
try
$artisan = Illuminate\Console\Application::start($app);
catch (Exception $e)
dd($e->getMessage());
此时我终于看到了一个启发性的信息:
string(41) "Connection refused [tcp://127.0.0.1:6379]"
在我的情况下是一个糟糕的 redis 配置,但在你的情况下可以是任何东西。
我希望这对某人有所帮助,或者至少下次我到这里时我会找到自己的答案。
【讨论】:
谢谢。我用这个发现了我的问题 - 它打印了could not find driver
。然后我发现我安装了php-mysql
,而php7.0-mysql
是必需的。这个链接也帮助了我 - digitalocean.com/community/tutorials/…【参考方案2】:
Laravel 5.2
chmod -R 777 存储
旧版 Laravel chmod 777 应用程序/存储/*
请注意,如果您有一个合理锁定的专用服务器,除了您自己的帐户之外没有其他用户帐户,那么 777 不会比其他任何东西带来更多的安全风险。恶意用户必须有其他漏洞才能利用这一点,此时,777 权限可能无论如何都没有实际意义。但是,如果您与不信任的其他用户在共享服务器上,则需要查看更复杂的权限或检查您的托管服务提供商是否已提供隔离。
他们真的应该把它放在快速入门文档中,并为各种设置提供示例。您可能还需要在第一次加载后再次运行它,因为会自动创建更多目录。在日志中查找写入错误。
你的 DocumentRoot 也应该是 /path/to/laravel-project/public
【讨论】:
同意,或者更好的是更详细的错误消息 他们应该不告诉你去 www.domain.com/project/public 因为那不是运行 Laravel 应用程序的正确方法。您应该设置您的 Web 服务器以提供 public/* 服务,仅此而已,public/index.php 是整个应用程序的唯一入口点。您可以使用 Apache 轻松做到这一点;如果您使用的是 nginx,那么您可能知道自己在做什么。如果您使用的是便宜的 cPanel 主机(我的哀悼),也很容易将 Web 根目录设置为指向公共。 严重暗示 777 只是最明显地违反安全原则... 我知道它已经有一年了,但 777 是最糟糕的方法,它违反了 @ftrotter 所说的所有安全规则。【参考方案3】:解决此问题的最短方法是使用 sudo 启动 artisan。这将为工匠提供所需的所有权限,并且也不会造成任何安全问题。
所以开始工匠服务:
$ php artisan serve
尝试使用:
$ sudo php artisan serve
因此您不必进行任何权限更改
【讨论】:
【参考方案4】:我删除了 app/storage/sessions
文件夹中的旧会话,并为 app/storage
授予了 775
权限,之后它就像火一样工作!
chmod -R 775 app/storage
祝你好运!
【讨论】:
【参考方案5】:更安全的选择是将存储目录的组更改为您的 Web 服务器组(通常是 apache
或 www-data
,但这可能因不同的操作系统而异)并保持目录的权限为775
.
chgrp -R www-data app/storage
或者chown
。
chown -R :www-data app/storage
然后确保目录权限为775
。
chmod -R 775 app/storage
来自Laravel web site:
Laravel 可能需要配置一组权限:文件夹 在应用程序/存储中需要 Web 服务器的写入权限。
【讨论】:
通常更安全地将组所有者更改为 Web 服务器,而不是授予“世界”对您文件的完全访问权限。 775 是目录的默认值,因此应该足够了。 chgrp -R apache 应用程序/存储 在 Mac 上,上述命令不起作用。但是,此命令执行了:sudo chown -R _www app/storage
(如有必要,将 _www 替换为您的 Apache 服务器名称)
然后我必须给组写权限:chmod -R g+w app/storage
谢谢,我觉得这很有帮助。但是,当您尝试运行“php artisan migrate ...”时,它稍后会产生问题-因为“/app/storage/”文件夹会给您“权限被拒绝”错误-您继续修复所有者的所有权限'www-data',直到出现 '/bootstrap/compiled.php' 权限错误。将其设置为所有者“www-data”或全部设置为 0777 是一个好主意吗?
(y),感谢您的改变! chmod 777 毁了很多孩子的童年:)【参考方案6】:
我有同样的问题,我只是使用 chmod 命令行
将目录 app/storage 的权限更改为 775【讨论】:
这已在当前接受的答案中指出(并且需要该答案中有关正确设置目录组的信息才能成为完全正确的答案。)以上是关于异常处理程序中的错误。 - 拉拉维尔的主要内容,如果未能解决你的问题,请参考以下文章