doctrine:generate:实体chmod操作不允许

时间:2016-11-13 20:25:22

标签: doctrine-orm symfony

我想继续一个我暂时没有碰过的项目,并在执行时遇到了这个错误 php bin/console doctrine:generate:entites SalonBundle(它来自shell,因此它使用PHP CLI)

Generating entities for bundle "SalonBundle"
> backing up Salon.php to Salon.php~
> generating SalonBundle\Entity\Salon

[Symfony\Component\Debug\Exception\ContextErrorException]
Warning: chmod(): Operation not permitted

doctrine:generate:entities [--path PATH] [--no-backup] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command> <name>

首先,我不确定为什么Symfony会尝试chmod 所有文件归root:www-data所有 文件权限为rw-rw-r--
我的用户在群组www-data中 上传,创建文件,复制,移动等工作正常

权限是通过运行以下命令的脚本设置的 $targetDir是作为参数传递给脚本的路径。

chown -R root:www-data $targerDir
find $targerDir -type d -exec chmod ug+rwx "{}" \;
find $targerDir -type f -exec chmod ug+rw "{}" \;
find $targerDir -type d -exec chmod g+s "{}" \;
find $targerDir -type d -exec setfacl -m g:www-data:rwx,d:g:www-data:rwx "{}" \;
find $targerDir -type f -exec setfacl -m g:www-data:rw- "{}" \;

根据某人的建议将-vvv添加到命令行,并得到了这个:

Exception trace:
() at /var/www/3DH/salon/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php:392
Symfony\Component\Debug\ErrorHandler->handleError() at n/a:n/a
chmod() at /var/www/3DH/salon/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php:392
Doctrine\ORM\Tools\EntityGenerator->writeEntityClass() at /var/www/3DH/salon/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php:347
Doctrine\ORM\Tools\EntityGenerator->generate() at /var/www/3DH/salon/vendor/doctrine/doctrine-bundle/Command/GenerateEntitiesDoctrineCommand.php:133
Doctrine\Bundle\DoctrineBundle\Command\GenerateEntitiesDoctrineCommand->execute() at /var/www/3DH/salon/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:256
Symfony\Component\Console\Command\Command->run() at /var/www/3DH/salon/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:837
Symfony\Component\Console\Application->doRunCommand() at /var/www/3DH/salon/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:187
Symfony\Component\Console\Application->doRun() at /var/www/3DH/salon/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:80
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/3DH/salon/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:118
Symfony\Component\Console\Application->run() at /var/www/3DH/salon/bin/console:27

This topic没有解决方案 This solution不适用于我,因为我不使用vagrant(未安装)

1 个答案:

答案 0 :(得分:0)

嗯,我明白了这个问题 我想我首先想到的是愚蠢......

@john Smith:你离我不远......

事实上,我的问题只是逻辑......
尝试用常规用户chmod root所拥有的文件是不可能的...
这是正常的

src/文件夹中生成的每个文件都是由/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/中的文件(我们称之为工具)生成的。 当然,文件由使用这些工具(树枝,实体,形式等)的用户拥有 生成文件时,这些工具尝试chmod新文件,以防我们愚蠢到不能设置我们的文件夹&amp;文件权限。

在我的情况下,当我通过我的webperms脚本时,所有文件都是root:www-data的所有者。
当然,当我尝试生成实体时,它会失败,因为我不再是文件所有者了。

目前有两种解决方案可以解决这个问题:

  1. src/个文件所有权更改为用户:www-data
  2. chmod
  3. 中的工具中评论/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/命令

    我不确定如何联系symfony团队,但我建议添加if条件,这取决于symfony参数,并允许我们绕过此chmod < / p>