2016-11-13 46 views
1

我想continu一个项目,我还没有在一段时间感动了,碰到这个错误来执行
php bin/console doctrine:generate:entites SalonBundle时(这是由外壳,所以它使用PHP CLI)学说:生成:实体搭配chmod操作不允许

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并不适用于我,因为我不使用无业游民(未安装)

+1

为什么文件应归root所有? –

+0

文件所有者是谁并不重要,因为它是编辑文件的组。我以前从未遇到过这个问题。不知道它是如何成为的。我甚至不知道为什么symfony尝试使用'chmod'来开始 – Preciel

+0

hmn doublecheck子文件夹/实体 –

回答

0

嗯,我明白这个问题。
我会说我是在第一时间我猜笨...

@约翰·史密斯:你并不遥远......

其实,我的问题就是逻辑...
尝试和chmod由root拥有的文件,普通用户是不可能的...
这是正常的

src/文件夹中生成的每个文件从文件所做的(让我们称之为工具)在/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/
当然文件是由用户使用这些工具(树枝,实体,表格等)拥有
生成文件时,这些工具尝试chmod新文件,以防我们笨到不能正确设置我们的文件夹&文件权限。

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

目前有两种解决方案,这一问题:

  1. 变化src/文件的所有权用户:www数据
  2. 评论在位于/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/

我的工具chmod命令我不知道如何联系symfony团队,但我会建议添加一个if条件,这将取决于symfony参数,并允许我们绕过这个chmod