PHP Artisan Tinker 无法写入配置路径

问题描述 投票:0回答:6

我以前使用过 Tinker,但突然它停止工作,无论什么项目、什么版本、新的还是现有的。我使用的是 macbook pro 2013、mac os Sierra、iterm2 和 zsh。我进行了全面研究,没有发现任何相关的内容,除了堆栈溢出中对 https://github.com/bobthecow/psysh/issues/382 的一个引用,它没有显示分辨率,不是 Laravel 特定的,但似乎涉及 psy shell(所有其他 artisan 命令都可以):

vagrant@homestead:~/代码/application$ php artisantinker

  [ErrorException]
  Writing to /home/vagrant/.config/psysh is not allowed.

这是我看到的错误。 Vagrant 是通过运行 homestead-7 的虚拟机设置的。

当我 ssh 进入 vagrant 并使用 ls -la 时,我看到 .config 文件夹,但无法访问它,由于访问被拒绝错误,我也无法 mkdir mvdir 。 (如果我从下面的堆栈跟踪中了解到哪个是触发错误的地方?touchfilemkdir 所在的跟踪顶部?)该文件夹本身由 vagrant 所有。我可以找出错误在哪里触发,但我不知道为什么它可能会触发,无论我使用什么版本的 laravel,无论是现有项目还是新下载的项目。

在 Laravel 项目本身中,我有

"laravel/tinker": "~1.0", 

在composer.json 和

/*
 * Package Service Providers...
 */
    Laravel\Tinker\TinkerServiceProvider::class

位于app/cofig/app.php。

我确实运行了详细的堆栈跟踪,尽管我不太确定它所指向的内容以及损坏的原因。

Exception trace:
     () at 

/home/vagrant/Code/lightpointLP/vendor/psy/psysh/src/Psy/ConfigPaths.php:213
 Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() at n/a:n/a
 trigger_error() at /home/vagrant/Code/lightpointLP/vendor/psy/psysh/src/Psy/ConfigPaths.php:213
 Psy\ConfigPaths::touchFileWithMkdir() at /home/vagrant/Code/lightpointLP/vendor/psy/psysh/src/Psy/Configuration.php:361
 Psy\Configuration->setHistoryFile() at /home/vagrant/Code/lightpointLP/vendor/psy/psysh/src/Psy/Configuration.php:409
 Psy\Configuration->getHistoryFile() at /home/vagrant/Code/lightpointLP/vendor/psy/psysh/src/Psy/Configuration.php:546
 Psy\Configuration->getReadline() at /home/vagrant/Code/lightpointLP/vendor/psy/psysh/src/Psy/Shell.php:82
 Psy\Shell->__construct() at /home/vagrant/Code/lightpointLP/vendor/laravel/tinker/src/Console/TinkerCommand.php:53
 Laravel\Tinker\Console\TinkerCommand->handle() at n/a:n/a
 call_user_func_array() at /home/vagrant/Code/lightpointLP/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:29
 Illuminate\Container\BoundMethod::Illuminate\Container\{closure}() at /home/vagrant/Code/lightpointLP/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:87
 Illuminate\Container\BoundMethod::callBoundMethod() at /home/vagrant/Code/lightpointLP/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:31
 Illuminate\Container\BoundMethod::call() at /home/vagrant/Code/lightpointLP/vendor/laravel/framework/src/Illuminate/Container/Container.php:539
 Illuminate\Container\Container->call() at /home/vagrant/Code/lightpointLP/vendor/laravel/framework/src/Illuminate/Console/Command.php:182
 Illuminate\Console\Command->execute() at /home/vagrant/Code/lightpointLP/vendor/symfony/console/Command/Command.php:264
 Symfony\Component\Console\Command\Command->run() at /home/vagrant/Code/lightpointLP/vendor/laravel/framework/src/Illuminate/Console/Command.php:167
 Illuminate\Console\Command->run() at /home/vagrant/Code/lightpointLP/vendor/symfony/console/Application.php:874
 Symfony\Component\Console\Application->doRunCommand() at /home/vagrant/Code/lightpointLP/vendor/symfony/console/Application.php:228
 Symfony\Component\Console\Application->doRun() at /home/vagrant/Code/lightpointLP/vendor/symfony/console/Application.php:130
 Symfony\Component\Console\Application->run() at /home/vagrant/Code/lightpointLP/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:122
 Illuminate\Foundation\Console\Kernel->handle() at /home/vagrant/Code/lightpointLP/artisan:35

如果可能需要任何其他信息,我很乐意提供,我真的不知道发生了什么或如何解决它。 谢谢你

8 月 31 日更新 所以我发现当我在 vagrant@homestead 中并且我 sudo su 当我在 root@homestead:/home/vagrant# 并输入 .config 时,有一个 configstore 目录和一个 psysh 目录,但它由 root 所有。我将所有者更改为 vagrant,退出,重新加载 vagrant 并出现相同的错误。


drwx------  2 root    root    4096 May  4 00:55 configstore
drwxr-xr-x  2 vagrant vagrant 4096 Aug 31 23:37 psysh

然后我尝试了 sudo -i 并获得了 root@homestead 但发现 .config 的内容不同。这次它有 .composer 目录并且不存在 psysh。所以我添加了 psysh 目录,所有者为 vagrant


drwxr-xr-x 2 root    root    4096 Feb 26  2017 composer
drwxr-xr-x 2 vagrant vagrant 4096 Aug 31 23:59 psysh
但这仍然不起作用。我也退出,重新加载流浪汉,我配置:清除两者,但我得到相同的无法写入错误。

我很茫然,请任何见解都会有帮助。谢谢!

php laravel command-line-interface laravel-artisan tinker
6个回答
2
投票

回答https://laracasts.com/discuss/channels/servers/tinker-doset-work-in-shared-hosting?page=1&replyId=604794

#You need to create a config file for PsySH with runtimeDir variable. 
# Just create a file ~/.config/psysh/config.php with:
<?php
return [
    'runtimeDir' => '~/tmp'
];


1
投票

看起来是 PsySH 的问题 http://psysh.org/

我无法回答这个问题,但看起来这个人也有同样的问题。也许值得联系他并询问他是如何解决这个问题的。

https://github.com/bobthecow/psysh/issues/382

您是否尝试过运行作曲家更新?祝你好运。


0
投票

我遇到了完全相同的问题,并且持续了好几天。我通过从项目目录运行

composer dump-autoload
来修复它。我之前尝试过该命令,但它不起作用,因为我在没有互联网访问的情况下尝试它,请确保运行该命令时已连接到互联网。祝你好运!


0
投票

我尝试了作曲家更新、转储自动加载,但没有任何效果。只需更改 ~./config 文件夹的权限即可。可以设置755或者更高(我这里不是说生产环境)。


0
投票

我已在终端上执行了下一个命令:

sudo chmod -R 775  ~/.config

0
投票

考虑更改 CLI 解释器的 PHP 版本。 I had to switch to my WSL php to make it work.

© www.soinside.com 2019 - 2024. All rights reserved.