Symfony 资产:转储运行时异常

Posted

技术标签:

【中文标题】Symfony 资产:转储运行时异常【英文标题】:Symfony assetic:dump runtime exception 【发布时间】:2013-03-02 13:35:56 【问题描述】:

我正在着手使用 Capifony 部署我的 Symfony 应用程序。当 Capifony 执行assetic:dump 我得到一个运行时异常。

[运行时异常] 无法写入文件 path/releases/20130314071536/app/../web/js/.

我尝试手动执行命令并得到相同的异常。 然后我使用 --verbose 参数尝试了该命令,并意识到所有具有源路径的文件都包含一个点,其中没有文件名,只有扩展名。当遇到没有扩展名的文件名(在本例中为 Makefile)并尝试写入文件“。”时出现异常。 (只有一个点)。

在同一服务器上的另一个域上,我有完全相同的代码,但手动部署。我没有得到这个错误。所以php版本不会有问题。我还检查了 Assetic 和 Assetic-Bundle 版本,它们是相同的。

资产工作方式不同的原因可能是什么?

编辑: 我忘了提到它在我的开发机器上也能正常工作。

编辑 2: 它开始在文件上失败

编辑 3: 我刚刚意识到它适用于开发环境......但是对于 --env=prod 它会出现问题

web/bundles/assets/assets/images/icons/aws.png

我没有在任何模板中使用的文件

错误的堆栈跟踪

Exception trace:
 () at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/Command/DumpCommand.php:249
 Symfony\Bundle\AsseticBundle\Command\DumpCommand->doDump() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/Command/DumpCommand.php:187
 Symfony\Bundle\AsseticBundle\Command\DumpCommand->dumpAsset() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/Command/DumpCommand.php:64
 Symfony\Bundle\AsseticBundle\Command\DumpCommand->execute() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:238
 Symfony\Component\Console\Command\Command->run() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:192
 Symfony\Component\Console\Application->doRun() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:78
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:105
 Symfony\Component\Console\Application->run() at /home/yanic.info/domains/pe.yanic.info/public_html/releases/20130318143912/app/console:33

config.yml

# Twig Configuration
twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
    form:
        resources: [HomeBundle:Form:fields.html.twig]
# Assetic Configuration
assetic:
    write_to: "%kernel.root_dir%/../web"
    debug:          %kernel.debug%
    use_controller: false
    bundles:        ['YanicSecurityBundle','HomeBundle','UsersBundle','CmsBundle','AssetsBundle','FormBundle','TranslationBundle','EventBundle','ShopBundle','NewsletterBundle','IssueBundle','ProjectBundle']
    filters:
        cs-s-rewrite: ~

编辑 4: 搜索 aws.png(第一个被破坏的结果)时,缓存文件中有 2 个结果:

/Applications/MAMP/htdocs/symfony-standard-2.1/app/cache/dev/appDevUrlGenerator.php:
  112          '_assetic_e4d7f8d' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => 'e4d7f8d',    'pos' => NULL,    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/assets/images/icons/arrow_rotate_clockwise.png',    ),  ),),
  113          '_assetic_e4d7f8d_0' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => 'e4d7f8d',    'pos' => '0',    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/assets/images/icons/arrow_rotate_clockwise_arrow_rotate_clockwise_1.png',    ),  ),),
  114:         '_assetic_e1ec2e3' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => 'e1ec2e3',    'pos' => NULL,    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/assets/images/icons/aws.png',    ),  ),),
  115          '_assetic_e1ec2e3_0' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => 'e1ec2e3',    'pos' => '0',    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/assets/images/icons/aws_aws_1.png',    ),  ),),
  116          '_assetic_490c282' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => '490c282',    'pos' => NULL,    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/assets/images/icons/cancel.png',    ),  ),),
  ...
  874          '_assetic_13192a1' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => '13192a1',    'pos' => NULL,    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/images/icons/arrow_rotate_clockwise.png',    ),  ),),
  875          '_assetic_13192a1_0' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => '13192a1',    'pos' => '0',    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/images/icons/arrow_rotate_clockwise_arrow_rotate_clockwise_1.png',    ),  ),),
  876:         '_assetic_3d6d4c9' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => '3d6d4c9',    'pos' => NULL,    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/images/icons/aws.png',    ),  ),),
  877          '_assetic_3d6d4c9_0' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => '3d6d4c9',    'pos' => '0',    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/images/icons/aws_aws_1.png',    ),  ),),
  878          '_assetic_5ea17b1' => array (  0 =>   array (  ),  1 =>   array (    '_controller' => 'assetic.controller:render',    'name' => '5ea17b1',    'pos' => NULL,    '_format' => 'png',  ),  2 =>   array (  ),  3 =>   array (    0 =>     array (      0 => 'text',      1 => '/js/images/icons/cancel.png',    ),  ),),

/Applications/MAMP/htdocs/symfony-standard-2.1/app/cache/dev/appDevUrlMatcher.php:
  517  
  518          // _assetic_e1ec2e3
  519:         if ($pathinfo === '/js/assets/images/icons/aws.png') 
  520              return array (  '_controller' => 'assetic.controller:render',  'name' => 'e1ec2e3',  'pos' => NULL,  '_format' => 'png',  '_route' => '_assetic_e1ec2e3',);
  521          
  ...
 4327  
 4328          // _assetic_3d6d4c9
 4329:         if ($pathinfo === '/js/images/icons/aws.png') 
 4330              return array (  '_controller' => 'assetic.controller:render',  'name' => '3d6d4c9',  'pos' => NULL,  '_format' => 'png',  '_route' => '_assetic_3d6d4c9',);
 4331          

编辑 5: 正如@cheesemacfly 所推荐的,我删除了hearsay_require_js 包,问题就消失了。既然我知道错误的原因,我需要知道为什么它只发生在临时服务器上以及使用 Capifony 部署时。

【问题讨论】:

如果您能提供项目中使用资产的行,这可能会有所帮助。 @cheesemacfly 你的意思是来自 Twig 模板? 如果您只在树枝模板中使用它们,那么可以! (至少在您遇到问题的那个) @cheesemacfly 在服务器上重新安装整个域后它再次工作。 我仍然对资产尝试处理 Makefile 感到惊讶。是有意的吗? 【参考方案1】:

正如其他用户所说,这是权限问题。

rm -rf symfonyProject/app/cache/*

chmod -R 755 symfonyProject/

chmod -R 777 symfonyProject/app/cache/

chmod -R 777 symfonyProject/app/logs/

希望对你有帮助

【讨论】:

嗨@mirza-selimovich。这与权限无关,因为我尝试以 root 身份执行,但发生了同样的情况……查看我的更新!【参考方案2】:

尝试重新创建缓存目录。

当您的缓存不同步时,您可能会遇到各种奇怪的行为。

清除缓存:

rm -rf app/cache/*

sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache

rm -rf app/cache/*

sudo setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX app/cache
sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache

【讨论】:

嗨@daniel-p。 Capifony 为每个部署使用一个新创建的缓存目录......所以不可能。 它没有被清除...整个项目进入一个新创建的目录,然后被符号链接...因此缓存目录也是新的。【参考方案3】:

检查您的权限,您似乎没有写权限

Unable to write file path/releases/20130314071536/app/../web/js/.

看这里:http://symfony.com/doc/2.0/book/installation.html 设置权限部分。

一个问题...

你能上传你的 deploy.rb 配置吗? 你设置了用户、root 模式...?

您还可以通过取消注释以下行来更详细

logger.level = Logger::MAX_LEVEL

你会看到一步一步的部署

【讨论】:

这不是权限问题,因为我尝试以 root 身份执行并且同样的问题。另外主要问题是该命令删除了文件名,只留下了扩展名。

以上是关于Symfony 资产:转储运行时异常的主要内容,如果未能解决你的问题,请参考以下文章

(C++)我正在尝试从文本文件中读取和输出随机行,并且在运行它时不断收到“浮点异常(核心转储)”

Symfony 控制台:发生错误/异常/警告时如何显示行号

捕获异常时将有用数据转储到控制台

Symfony - 进程运行抛出异常 - 在命令行上执行有效

如何调试 grails 运行时异常?

抛出 OOM 异常时无法使用 VM 选项获取转储文件:HeapDumpOnOutOfMemoryError