作曲家:file_put_contents(./ composer.json):未能打开流:拒绝权限



我正在尝试将prestissimo安装到Ubuntu 16.04服务器,但这会导致错误:

$ composer global require "hirak/prestissimo:^0.3"
Changed current directory to /home/kramer65/.composer

  [ErrorException]
  file_put_contents(./composer.json): failed to open stream: Permission denied

require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--] [<packages>]...

我登录为用户kramer65,所以我不知道为什么它不能写入我的主文件夹。我对permission denied的正常反应是使用sudo,但作曲家总是说:

不要将作曲家作为根/超级用户!有关详细信息,请参见https://getcomposer.org/root

任何想法我如何解决这个问题?

我有这个问题要安装laravel/lumen。

可以通过以下命令解决:

$ sudo chown -R "$(id -un)" "$(composer config --global home)"

此命令要做什么:执行为特权用户(root)递归将文件所有者(不是组)更改为当前用户的命令(而不是组)递归到composer_home目录。

作为用户名以及作曲家主目录在每个系统上可能有所不同,以下两个命令用于获得...

  1. ...用户名: id -un
  2. ...作曲家主目录:composer config --global home

这是一个古老的问题,因此答案的读者可能希望意识到以下内容:

  • prestissimo 专用于作曲家1
  • 截至今天,作曲家2已发布,该公司已经不再受益于 prestissimo
  • ,但截至今天,Composer 2.2已发布,这是长期支持(LTS)版本,您应该将作曲家1替换为立即如果您认为它需要 pressTissimo 过去,它通常是比作曲家1的速度要快得多。

如何继续:

  1. 从您的任何系统中删除 prestissmo
  2. 在您的任何系统上,用作曲家2.2替换作曲家1。
  3. 享受。

要解决此问题,您应该打开一个终端窗口并键入此命令:

sudo chown -R user ~/.composer(在您的情况下, user是当前用户,kramer65

运行此命令后,您应该有权运行Composer Global require命令。

您也可能需要从当前目录中删除.composer文件,以打开终端窗口并输入此命令:

sudo rm -rf .composer

对我来说,在ubuntu 18.04中。我需要在 ~/.config/composer/

内chown

,例如

sudo chown -R $USER ~/.config/composer

然后全局命令工作。

在我的情况下,我没有~/.composer的问题。
因此,在Laravel应用程序根文件夹中,我做了sudo chown -R $USER composer.lock,这很有帮助。

我也遇到了这个问题,但就我而言,我错了目录。检查您正在工作的目录

在我的情况下,所有权限在其他答案中的所有位置都是正确的,但是我仍然遇到此错误。

事实证明,有一些供应商目录由root拥有。作曲家在进行更新或安装时在整个地点写composer.lock文件

因此解决我的案件 - 这是专门用于Laravel帆容器 - 所有所有权均已转换为项目中的用户sail

以root:

输入sail容器
vendor/bin/sail root-shell

设置项目中所有文件的文件所有权:

chown -R sail:sail /var/www/html

您可能只想在第一次尝试时执行供应商目录:

chown -R sail:sail /var/www/html/vendor

从手工滚动的docker-compose.yaml设置转换为Laravel Sail之后,所有权是错误的,IMO以明智的方式处理文件所有权和权限,将root与应用程序用户sail分开。

在我的情况下, .composer由root拥有,所以我做了 sudo rm -fr .composer,然后我的全局要求工作。

被警告!如果您不确定自己在做什么,则不想使用该命令。

这可能是超级边缘的情况,但是如果您使用的是Travis CI并利用缓存,则可能需要清除所有缓存和重试。

我从sudo到非sudo构建时解决了我的问题。

我得到了同样的例外,但是就我而言,我正在使用PowerShell运行命令因此,我用指令修复了此操作,以首先解开多个文件。 PS C:> dir C:executable_file_Path*PowerShell* | Unblock-File然后使用以下来加载软件包 & 'C:path_to_executablephp.exe' "c:path_to_composer_.phar_filecomposer.phar "require desired/package

我在与WSL Windows 10一起使用时遇到了相同的错误。我使用以下命令来解决它: -

sudo chown -R $USER  /home/<username>/.config/composer

我在

中安装的作曲家的Windows版本中也有相同的问题

c: composer

我尝试此命令

C: Composer需要AWS/AWS-SDK-PHP

然后,我简单地进入了作曲家安装的文件夹,然后再次尝试

c: Composer&gt; Composer需要AWS/AWS-SDK-PHP

快速安装的软件包。

我在/var/www/html内运行composer require时正面临同一问题,Apache Web服务器的默认根文件夹,我能够通过使当前用户成为所有者,以使当前用户成为此HTML目录

sudo chown -R $USER /var/www/html

,但您绝对想设置权限

chmod 755 -R /var/www/html

在我的情况下,我使用sudo mkdir projectFolder创建文件夹。它由root用户所有,我已登录使用非root用户。

因此,我使用命令sudo chown mynonrootuser:mynonrootuser projectFolder更改了文件夹的权限,然后效果很好。

有2个组件需要考虑。

作曲家希望您将其作为登录用户运行。但是,您的Web服务器希望对您的应用程序拥有权限。

解决方案是将用户添加到Web服务器组,然后更新应用程序的权限。

对于运行Apache Web服务器的Ubuntu,请使用以下命令将自己添加到Apache组,用用户名替换<username>

    sudo usermod -a -G www-data <username>

现在您需要更新应用程序的权限。导航到应用程序的根文件夹,并使用以下命令

    sudo chown -R $USER:www-data .

作曲家现在拥有必要的权限,可以拉动所需的包装,而Apache具有提供您申请的必要权限。

相关内容

  • 没有找到相关文章

最新更新