Laravel - “工匠修补匠” - > mkdir():权限被拒绝
Posted
技术标签:
【中文标题】Laravel - “工匠修补匠” - > mkdir():权限被拒绝【英文标题】:Laravel - "artisan tinker" -> mkdir(): Permission denied 【发布时间】:2018-06-26 11:02:27 【问题描述】:我已经搜索了几个小时,但即使有类似的问题也找不到解决方案。
我正在尝试使用用户 webmaster
(项目目录的所有者 demo
)在全新的 laravel 安装上运行 php artisan tinker
,但我收到以下错误:
In Configuration.php line 352:
mkdir(): Permission denied
使用详细标志运行:
异常跟踪: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() at n/a:n/a mkdir() 在 /media/usb/drive1/websites/demo/vendor/psy/psysh/src/Psy/Configuration.php:352 Psy\Configuration->getRuntimeDir() 在 /media/usb/drive1/websites/demo/vendor/psy/psysh/src/Psy/Shell.php:185 Psy\Shell->getDefaultCommands() 在 /media/usb/drive1/websites/demo/vendor/symfony/console/Application.php:1211 Symfony\Component\Console\Application->init() 在 /media/usb/drive1/websites/demo/vendor/symfony/console/Application.php:435 Symfony\Component\Console\Application->add() at /media/usb/drive1/websites/demo/vendor/psy/psysh/src/Psy/Shell.php:134 Psy\Shell->add() 在 /media/usb/drive1/websites/demo/vendor/symfony/console/Application.php:421 Symfony\Component\Console\Application->addCommands() at /media/usb/drive1/websites/demo/vendor/laravel/tinker/src/Console/TinkerCommand.php:54 Laravel\Tinker\Console\TinkerCommand->handle() at n/a:n/a call_user_func_array() 在 /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:29 Illuminate\Container\BoundMethod::Illuminate\Containerclosure() 在 /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Container/ BoundMethod.php:87 Illuminate\Container\BoundMethod::callBoundMethod() 在 /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:31 Illuminate\Container\BoundMethod::call() at /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Container/Container.php:549 Illuminate\Container\Container->call() at /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Console/Command.php:183 Illuminate\Console\Command->execute() at /media/usb/drive1/websites/demo/vendor/symfony/console/Command/Command.php:252 Symfony\Component\Console\Command\Command->run() at /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Console/Command.php:170 Illuminate\Console\Command->run() at /media/usb/drive1/websites/demo/vendor/symfony/console/Application.php:938 Symfony\Component\Console\Application->doRunCommand() 在 /media/usb/drive1/websites/demo/vendor/symfony/console/Application.php:240 Symfony\Component\Console\Application->doRun() at /media/usb/drive1/websites/demo/vendor/symfony/console/Application.php:148 Symfony\Component\Console\Application->run() at /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Console/Application.php:88 Illuminate\Console\Application->run() at /media/usb/drive1/websites/demo/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:121 Illuminate\Foundation\Console\Kernel->handle() at /media/usb/drive1/websites/demo/artisan:37
希望有人能给我一些提示。谢谢!
相关信息
发行版:Raspbian GNU/Linux 8 (jessie) 网络服务器:Apache/2.4.25 Laravel 版本:5.5(最新) DocumentRoot:/var/www/websites -> /media/usb/drive1/websites/
Apache 用户:www-data
(在项目目录中有权限)
报告的类似问题
https://github.com/laravel/tinker/issues/34 artisan tinker: mkdir() permission denied【问题讨论】:
DocumentRoot
应该是 Laravel 的 public/
文件夹,你设置对了吗?
对,但我正在运行一个开发服务器,其中包含多个项目以覆盖一个域。无论如何,我认为这与此问题无关。
您是否尝试将 runtimeDir 转储到 Configuration->getRuntimeDir()
以找出权限被拒绝的位置?
@sisve 感谢您的评论!我将如何实现将变量转储到终端?
dump($variable);
【参考方案1】:
我问这个问题已经一年了。我只是忽略了缺乏使用修补程序并继续。但是今天我终于找到了一个解决方案,并认为这可能是一个好主意。
共享服务器环境可能会导致此错误。从文件vendor/psy/psysh/src/Configuration.php
中转储第352 行的变量$this->runtimeDir
告诉我缺少在/run/user/1000/psysh
中创建文件夹的权限,其中1000
是uid。
一种解决方法是告诉 psysh 使用操作用户具有写入权限的目录。这可以通过runtimeDir
配置选项来完成。您需要做的就是在 ~/.config/psysh/config.php
或本地 Laravel 项目根目录中的 .psysh.php
中创建一个配置文件。添加以下内容,您就可以开始了。
<?php
return [
'runtimeDir' => './.psysh',
];
【讨论】:
以上是关于Laravel - “工匠修补匠” - > mkdir():权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
返回重定向()->动作('BookingController@index')laravel 8