sudo composer install 与 composer install 的区别

10

我运行了sudo composer install,出现以下警告:

不要以root/super用户身份运行Composer!详见https://getcomposer.org/root

我尝试运行composer install,出现以下错误:

[ErrorException] file_put_contents(/Applications/MAMP/htdocs/code/bheng/vendor/composer/installed.json):打开文件失败:权限被拒绝

这是我的Laravel文件夹当前的权限设置:

total 1872
-rw-r--r--   1 bheng  staff     777 Feb 27 20:18 phpunit.xml
-rw-r--r--   1 bheng  staff      87 Feb 27 20:18 phpspec.yml
-rw-r--r--   1 bheng  staff     481 Feb 27 20:18 package.json
drwxr-xr-x   3 bheng  staff     102 Feb 27 20:18 note
-rw-r--r--   1 bheng  staff     967 Feb 27 20:18 md-bheng-readme.txt
-rw-r--r--   1 bheng  staff     503 Feb 27 20:18 gulpfile.js
-rw-r--r--   1 bheng  staff      26 Feb 27 20:18 contributors.txt
-rw-r--r--   1 bheng  staff    1635 Feb 27 20:18 artisan
-rw-r--r--   1 bheng  staff      43 Feb 27 20:18 Procfile
-rw-r--r--   1 bheng  staff    5634 Feb 27 20:18 Gruntfile.js
drwxr-xr-x   4 bheng  staff     136 Feb 27 20:18 tests
drwxr-xr-x   5 bheng  staff     170 Feb 27 20:18 storage
drwxr-xr-x   4 bheng  staff     136 Feb 27 20:18 sql
-rw-r--r--   1 bheng  staff     560 Feb 27 20:18 server.php
drwxr-xr-x   5 bheng  staff     170 Feb 27 20:18 resources
-rw-r--r--   1 bheng  staff     105 Feb 27 20:18 pull.sh
drwxr-xr-x   7 bheng  staff     238 Mar  1 14:46 bootstrap
-rw-r--r--@  1 bheng  staff       0 Mar  1 14:46 Icon?
drwxr-xr-x  22 bheng  staff     748 Mar  2 11:47 app
drwxrwxrwx@ 27 bheng  staff     918 Mar  3 14:55 public
drwxr-xr-x   8 bheng  staff     272 Mar  6 13:25 database
-rw-------@  1 bheng  staff     405 Mar 14 09:29 id_rsa.pub
-rw-------   1 bheng  staff    1766 Mar 14 09:29 id_rsa
-rw-r--r--   1 bheng  staff  126713 Mar 14 10:00 composer.lock
drwxr-xr-x  18 bheng  staff     612 Mar 28 21:24 config
-rw-r--r--   1 bheng  staff    1022 Mar 30 12:21 composer.json
drwxr-xr-x  32 bheng  staff    1088 Mar 30 12:21 vendor

这是我的composer.json文件中的内容:

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
    "laravel/framework": "5.1.0",
    "intervention/image": "^2.3",
    "laravelcollective/remote": "5.1.*",
    "doctrine/dbal": "^2.3",
    "league/flysystem-sftp": "^1.0"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.0",
        "phpspec/phpspec": "~2.1"
        },
        "autoload": {
            "classmap": [ "database" ],

            "psr-4": {
                "App\\": "app/"
            }
            },
            "autoload-dev": {
                "classmap": [
                "tests/TestCase.php"
                ]
                },
                "scripts": {
                    "post-install-cmd": [
                    "php artisan clear-compiled",
                    "php artisan optimize"
                    ],
                    "post-update-cmd": [
                    "php artisan clear-compiled",
                    "php artisan optimize"
                    ],
                    "post-create-project-cmd": [
                    "php -r \"copy('.env.example', '.env');\"",
                    "php artisan key:generate"
                    ]
                    },
                    "config": {
                        "preferred-install": "dist"
                    }
                }

我该如何解决这个问题?是否需要对某些文件夹进行chmod操作?


1
删除您的 vendor 目录并再次运行 composer install - Andy
谢谢你的建议 - 我会去做的。 - code-8
个人而言,我会使用 sudo --user=www-data composer install 命令以 apache 用户身份运行。 - apokryfos
1个回答

16

删除您的供应商目录并再次运行composer install

您遇到了权限被拒绝的错误,是因为在运行sudo composer install时根用户创建了vendor/composer/installed.json文件,所以现在当您运行composer install时,您的用户没有权限编辑该文件。

更新:

如果您正在使用实时文档根目录(不应该这样做,请阅读有关原子部署的文章),则可以尝试对供应商目录及其内容执行chown以避免在删除和重新运行composer install之间出现任何停机时间:

$ sudo chown -R myuser: vendor/

myuser替换为您的用户名。


这个问题有什么解决方案? - Aziz
@Aziz,解决方案在这个答案的第一句话。始终在不使用sudo的情况下运行composer install。 - Andy
我的意思是,如果我已经用sudo开始了一次,那么如何在不从服务器中删除所有内容的情况下解决它? - Aziz
@Aziz,你不应该在现有的文档根目录上直接进行修改。你需要了解一下原子部署的方法。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接