Symfony2 Production CSS/JS включает выдачу 404 (может быть основной проблемой)

Я пишу Bundle для темы сайта, который мы разрабатываем. Другие пакеты используют пакет Core для создания шаблонов через Twig, а этот пакет Themeing искажает этот основной пакет.

Я сделал это, реализовав метод getParent() внутри класса пакета темы, чтобы вернуть имя основного пакета, таким образом заставив Symfony2 искать в пакете темы (практически ЛЮБОЙ файл), прежде чем искать в пакете Core.

Теперь это прекрасно работает в режиме разработки, однако, когда я пробую в режиме производства, и мои файлы 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 показывают:

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

Отсутствующий файл JS, вероятно, связан с другим пакетом, который не используется. Основная проблема в том, что шаблон ищет:

<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 %}

Который объявлен в базовом шаблоне как:

        {# 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(), заключенный в теги комментариев. Полное удаление строки не помогает.


person Mike    schedule 15.02.2013    source источник
comment
Используете ли вы активы {% javascripts ....%} и {% таблицы стилей .... %} в своей теме?   -  person ZhukV    schedule 17.02.2013


Ответы (1)


Удаление parent() действительно помогло, после тщательной очистки кеша и пересборки.

Скоро я сделаю здесь запись об ошибке, так как по какой-то причине наличие parent() внутри комментария ({# ... #}) нарушало генерацию, хотя ничего внутри {# ... #} не должно анализироваться или даже учитываться компилятором шаблона.

Хитрый баг.

person Mike    schedule 19.02.2013