PHP Artisan Tinker 无法写入配置路径

Posted

技术标签:

【中文标题】PHP Artisan Tinker 无法写入配置路径【英文标题】:PHP Artisan Tinker Cannot Write to Config Path 【发布时间】:2018-01-30 04:27:53 【问题描述】:

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

vagrant@homestead:~/Code/application$ php artisan tinker

  [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 存在。所以我添加了以 vagrant 作为所有者的 psysh 目录 drwxr-xr-x 2 root root 4096 Feb 26 2017 composer drwxr-xr-x 2 vagrant vagrant 4096 Aug 31 23:59 psysh 但这仍然行不通。我也退出了,重新加载了 vagrant,我 config:cleared 两者都被清除了,但我得到了同样的无法写入错误。

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

是的,我已经完成作曲家更新,自动加载 cahche:clear 等。谢谢,我会看看。【参考方案2】:

经过进一步的研究和测试,决定提出一个新问题,因为它超出了最初似乎是错误的范围。

【讨论】:

【参考方案3】:

我遇到了同样的问题,并且持续了好几天。我通过从项目目录运行composer dump-autoload 来修复它。我之前尝试过该命令,但它不起作用,因为我在没有互联网访问的情况下尝试它,请确保在运行该命令时已连接到互联网。祝你好运!

【讨论】:

是的,我曾尝试过几次(通过互联网),但没有帮助。从那以后,我了解到廷克确实在工匠服务下运行。不过我可能会再试一次,只是为了看看。谢谢。我将发布结果,因为我有一段时间没有这样做了。【参考方案4】:

我尝试了 composer update、dump-autoload 但没有任何效果。只需更改 ~./config 文件夹的权限即可。可以设置755或更高(这里不说生产环境)。

【讨论】:

【参考方案5】:

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

sudo chmod -R 775  ~/.config

【讨论】:

您能详细说明一下这个解决方案吗?【参考方案6】:

回复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'
];

【讨论】:

以上是关于PHP Artisan Tinker 无法写入配置路径的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.5:php artisan tinker:ErrorException:目录不为空[重复]

PHP Artisan Tinker 从任何命令崩溃

在 php artisan tinker 中保存更改

如何使 php artisan tinker 显示完整的错误(消息)?

命令行语句 php artisan tinker 不起作用

使用 php artisan migrate 时,迁移时更改表名,使用 tinker 保存对象时出错