Symfony2" Assetic:dump -env-prod"权限被拒绝异常

时间:2015-01-19 11:19:34

标签: symfony permissions assetic yui-compressor

在我与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没有任何工作总是同样的问题

2 个答案:

答案 0 :(得分:2)

在运行基于Web的应用程序时处理文件权限的一种方法,该应用程序需要自动部署或持续手动更新,例如使用symfony2中的bin / console,以确保文件属于应用程序所在的用户运行。

由于您没有提供环境设置,我将做一些假设并为您提供通用的设置方案,希望这将有助于指导您针对特定情况的最佳解决方案。

环境假设:

  • OS:linux flavor;
  • Web服务器:nginx将作为www-data运行;
  • PHP:php-fpm将作为testapp运行并为此应用程序使用套接字连接;

通用设置步骤:

  1. 在/etc/nginx/nginx.conf文件中,确保将用户/组设置为www-data;

  2. 在/etc/php5/fpm/pool.d/apptest.conf文件中,确保用户& group被设置为testapp;

  3. 提示:可能需要创建上面的文件,如果是这样的话,您应该只复制位于同一文件夹中的www.conf文件的内容。

    1. 在/etc/php5/fpm/pool.d/apptest.conf文件中,确保listen.owner& listen.group设置为www-data;

    2. 确保您在此文件/etc/php5/fpm/pool.d/apptest.conf中有一行如下所示:

    3. listen = /var/run/php5-fpm.apptest.sock.

      注意:上面那行的fpm.apptest.sock部分,它是一个文件的名称,但尚未存在但将在重新启动php时创建。好处是你将为这个应用程序提供一个独立的php进程;

      1. a)在nginx的情况下,如果您使用套接字连接,请确保在apptest conf文件中添加此行:
      2. unix:/var/run/php5-fpm.apptest.sock;

        b)如果您使用的是apache,请在该conf文件中添加以下行:

        -socket /var/run/php5-fpm.apptest.sock;

        1. 如果您在Linux机器上,请创建没有密码的用户,并且应该调用它,apptest。
        2. 注意:apptest是您的应用程序的名称,它也将是运行php的用户,它也应该是应用程序文件/文件夹所有者。

          1. 重启php和nginx / apache。
          2. 提示:要更改为没有密码的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,这样你就可以删除日志和缓存了。