我正在尝试将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目录。
作为用户名以及作曲家主目录在每个系统上可能有所不同,以下两个命令用于获得...
- ...用户名:
id -un
- ...作曲家主目录:
composer config --global home
这是一个古老的问题,因此答案的读者可能希望意识到以下内容:
- prestissimo 专用于作曲家1
- 截至今天,作曲家2已发布,该公司已经不再受益于 prestissimo 。
- ,但截至今天,Composer 2.2已发布,这是长期支持(LTS)版本,您应该将作曲家1替换为立即如果您认为它需要 pressTissimo 过去,它通常是比作曲家1的速度要快得多。
如何继续:
- 从您的任何系统中删除 prestissmo 。
- 在您的任何系统上,用作曲家2.2替换作曲家1。
- 享受。
要解决此问题,您应该打开一个终端窗口并键入此命令:
sudo chown -R user ~/.composer
(在您的情况下, user
是当前用户,kramer65
)
运行此命令后,您应该有权运行Composer Global require命令。
您也可能需要从当前目录中删除.composer文件,以打开终端窗口并输入此命令:
sudo rm -rf .composer
对我来说,在ubuntu 18.04中。我需要在 ~/.config/composer/
,例如
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具有提供您申请的必要权限。