在我与root用户执行更新(composer.phare update)之前,每件事都运行正常,但现在当我尝试运行“Assetic:dump -env-prod”时,我收到“Permission denied”错误
[Assetic\Exception\FilterException]
An error occurred while running:
'' '-jar' '/home/symfony/www/app/Resources/java/yuicompressor.jar' '--ch
arset' 'UTF-8' '-o' '/tmp/YUI-OUT-vbRlyu' '--type' 'css' '/tmp/YUI-IN-OoRVH
Q'
Error Output:
sh: 1: : Permission denied
Input:
meta.foundation-version{ ...
我在这篇文章Fontawesome fonts fail after assets:install and assetic:dump
中尝试了所有解决方案清除缓存,chown,chgrp和chmod没有任何工作总是同样的问题
答案 0 :(得分:2)
在运行基于Web的应用程序时处理文件权限的一种方法,该应用程序需要自动部署或持续手动更新,例如使用symfony2中的bin / console,以确保文件属于应用程序所在的用户运行。
由于您没有提供环境设置,我将做一些假设并为您提供通用的设置方案,希望这将有助于指导您针对特定情况的最佳解决方案。
环境假设:
通用设置步骤:
在/etc/nginx/nginx.conf文件中,确保将用户/组设置为www-data;
在/etc/php5/fpm/pool.d/apptest.conf文件中,确保用户& group被设置为testapp;
提示:可能需要创建上面的文件,如果是这样的话,您应该只复制位于同一文件夹中的www.conf文件的内容。
在/etc/php5/fpm/pool.d/apptest.conf文件中,确保listen.owner& listen.group设置为www-data;
确保您在此文件/etc/php5/fpm/pool.d/apptest.conf中有一行如下所示:
listen = /var/run/php5-fpm.apptest.sock.
注意:上面那行的fpm.apptest.sock部分,它是一个文件的名称,但尚未存在但将在重新启动php时创建。好处是你将为这个应用程序提供一个独立的php进程;
unix:/var/run/php5-fpm.apptest.sock;
b)如果您使用的是apache,请在该conf文件中添加以下行:
-socket /var/run/php5-fpm.apptest.sock;
注意:apptest是您的应用程序的名称,它也将是运行php的用户,它也应该是应用程序文件/文件夹所有者。
提示:要更改为没有密码的linux用户,您应具有root权限并运行:
sudo -u apptest -i.
在此之后,您应该像以前创建的apptest用户一样执行所有命令,包括运行symfony2 bin / console。
这些是非常通用的步骤,因此如果您需要任何澄清,请与我们联系。
答案 1 :(得分:1)
我不建议使用root进行更新。在我看来,方法是让/ app / logs / app / cache对服务器可写,而src和vendor文件夹只对服务器可读。
因此,假设您的用户和群组是:coolman,而不是试试这个:
# everything is yours
chown coolman:coolman -R .
# all and group can access folders and read files, you as user can additionally write them
chmod ag=rX,u=rwX -R .
# full access to logs and cache for everyone (also the server)
chmod a+rwX -R app/logs app/cache
您可以与coolman用户一起更新作曲家。
也只有一个小问题。日志可能是www-data:www-data rw -r -r--所以你不能删除它们。所以只需在app.php和app / console文件中添加一行:
\umask(0000);
我认为此行已默认注释掉。这就是说,如果在PHP中没有设置显式权限,那么每个创建的文件都会得到0777 - mask = 0777,这样你就可以删除日志和缓存了。