Symfony2生产CSS / JS包括抛出404(可能是父问题)

时间:2013-02-15 15:54:58

标签: symfony twig development-environment production-environment assetic

我正在编写一个Bundle来主题我们正在开发的网站。其他Bundles通过Twig调用Core bundle进行模板化,这个Themeing包就会扭曲该核心包。

我通过在主题包类中实现getParent()方法来返回核心包的名称,从而导致Symfony2在查看Core包之前查看主题包(基本上是ANY文件)。

现在,这在开发模式下运行良好,但是,当我在生产模式下尝试并且我的CSS / JS文件合并为一个时,生成的路径将解析为404页面,并且所有样式都将丢失。

我已经清除了dev和production缓存,以及rm -rf d dev和prod目录。调用php app/console assetic:dump --env=prod --no-debug会返回:

$ php app/console assetic:dump --env=prod --no-debug
Dumping all prod assets.
Debug mode is off.

10:25:40 [file+] /webapps/xxxbundle/app/../web/css/f996955.css
10:25:46 [file+] /webapps/xxxbundle/app/../web/js/f307b3f.js
10:26:05 [file+] /webapps/xxxbundle/app/../web/css/55d26a0.css
10:26:05 [file+] /webapps/xxxbundle/app/../web/js/ccfc30e.js



  [RuntimeException]
  The source file "/webapps/xxxclient/app/../web/bundles/xxxbundle/js/modernizer.custom.96376.js"
  does not exist.



assetic:dump [--watch] [--force] [--period="..."] [write_to]

面向css和js dirs的网站显示:

$ ls web/css
55d26a0.css  f996955.css
$ ls web/js
f307b3f.js

缺少的JS文件很可能是由于另一个未使用的bundle。主要问题是,模板正在寻找:

<link rel="stylesheet" type="text/css" media="screen" href="/css/2a6fc23.css">
<script src="/js/adf6a7a.js"></script>

两者都不存在。任何想法或方向?

[[编辑]]

在进一步审核时,即使资产生产缓存也会引用这些文件,但它们永远不会被创建...为什么? ....

[[模板]]

(覆盖模板)

{% extends 'FrontBundle:Frame:base.html.twig' %}
{% block title %}{{ page.title }}{% endblock %}

{% block wrapper %}

    {# route: {{ route }} #}

    {{ rendered | raw }}

{% endblock %}

(覆盖模板)

{% extends 'SkinBundle::layout.html.twig' %}

{# Site Name #}
{% block site_name %}
    {{ page.title }} | {{ parent() }}
{% endblock %}

布局扩展了一个基本模板,它只是一个网站的外壳,在这个过程中重写可以说像CSS一样:

{% extends 'FrontBundle:Frame:default.html.twig' %}
{# Stylesheets #}
{% block stylesheets %}
{# no execute {{ parent() }}#}
{% stylesheets
    filter='cssrewrite'
    'bundles/core/css/normalize.css'
    'bundles/skin/css/main.css'
    %}
        <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}">
    {% endstylesheets %}
{% endblock %}

在Base模板中声明为:

        {# Stylesheets #}
        {% block stylesheets %}
            {% stylesheets
                filter='cssrewrite'
                'bundles/core/css/normalize.css'
                'bundles/front/css/global.css'
                'bundles/page/css/page.css'
            %}
            <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}">
            {% endstylesheets %}
            <!-- Page -->
        {% endblock %}

这些样式表不是必需的,这就是我将parent()包含在注释标记中的原因。完全删除该行没有帮助。

1 个答案:

答案 0 :(得分:0)

在彻底清除缓存并重建后,删除parent()确实有所帮助。

我将很快在这里制作一张错误机票,因为某些原因parent()内部有{# ... #}正在打破这一代,即使{# ... #}内部没有任何内容由模板编译器解析,甚至考虑。

棘手的错误。