资产生成链接但没有文件

时间:2012-06-02 15:14:29

标签: symfony assetic

我正在尝试在symfony2中使用assetic来管理我的CSS。 链接生成正常。但是,不会生成任何文件。

这是我的配置:

Layout.html.twig

    {% stylesheets
      '@FooBundle/Resources/public/css/main.css'
      filter='cssrewrite'
    %}
    <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}

Config.yml

assetic:
debug:          %kernel.debug%
use_controller: false
bundles:        [ FooBundle ]
filters:
    cssrewrite: ~

Config_dev.yml

assetic:
use_controller: true

Assetic生成te链接foo.foo/app_dev.php/css/957d3aa_main_1.css。但是,该文件不存在(或其他任何地方)。我已经尝试过使用权限并查看(nginx)日志,但到目前为止还没有。

非常感谢所有帮助。

5 个答案:

答案 0 :(得分:35)

在处理资产时,您有 2个选项。您没有在计算机中看到资产的原因是您选择了选项1.


选项1:SYMFONY可以动态处理文件

这意味着在开发环境中生成的每个资产路径都由Symfony动态处理。因此,Assetic会生成CSS和JavaScript文件的路径,这些文件实际上并不存在于您的计算机上。这是一个内部Symfony控制器,可以打开文件并为您回送内容。

<强> 优点:      - 对您的资产所做的更改立即生效      - 这在开发模式下非常棒,因为Symfony会为您动态生成文件

<强> 缺点:      - 这在prod模式下是不可能的,因为动态渲染每个资源会太慢      - 您的计算机无法直接访问资产(这就是您无法找到该文件的原因)      - 如果使用大量过滤器等,可能会很慢......

要在开发模式下执行此操作,只需在config_dev.yml中编辑assetic配置:

assetic:
    use_controller: true

选项2:倾销资产文件

如果您不想动态处理资产,可以手动转储资产,这意味着实际上是在您的计算机上编写资产。

<强> 优点:      - 不需要Symfony动态生成文件,因此运行速度会快得多      - 因此,这在产品模式下是完美的      - 可以在Web /目录中(或者您选择输出文件的任何地方)物理访问文件

<强> 缺点:      - 您每次更改时都需要转储资产。或者您可以使用--watch命令转储资产,如果您在开发模式下工作,这可能会有点烦人。

要做到这一点:

将use_controller设置为false(config_dev.yml):

assetic:
    debug:          %kernel.debug%
    use_controller: false

如有必要,您甚至可以选择阅读和输出资产的位置

   assetic:
        read_from:      %kernel.root_dir%/Resources/views/
        write_to:       %kernel.root_dir%/../web/thefolderyouwant/

现在,输出从资产

中的 write_to 配置开始
{% stylesheets
  '@FooBundle/Resources/public/css/main.css'
  output='css/main.css'
%}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

如果继续,您将有resource error,因此请在config_dev.yml中注释掉或删除这些资产路线:

_assetic:
    resource: .
    type:     assetic

最后,您可以自动生成资源,以便您所做的更改立即生效:

php app/console assetic:dump --watch

在这种情况下,该文件现在应该可用:

/web/thefolderyouwant/css/main.css

有关详细信息,请参阅食谱:How to use Assetic for Asset Management?

答案 1 :(得分:0)

我遇到了同样的问题,我只需要安装java

sudo apt-get install default-jre

你也可以看一下输出的开头,这可能会有所帮助:

app/console assetic:dump > outfile 2>&1

答案 2 :(得分:0)

如果您使用SASS编译SCSS但use_controller: true或未安装ruby gem ruby,则sass启用时也无法生成文件。< / p>

答案 3 :(得分:0)

我有一个与此非常相似的错误。突然资产停止了工作。我添加的唯一内容是FOSRestBundle。也许你正在使用剩下的包。

这是我的解决方案:

fos_rest:
    routing_loader:
        default_format: json

    param_fetcher_listener: true
    body_listener: true

    format_listener:
        rules:
            # render "/api" requests as json
            - { path: ^/api, priorities: [ json ], fallback_format: json, prefer_extension: true }
            # default, fallback rendering twig templates
            - { path: ^/, priorities: ['html', 'application/javascript', 'text/css', '*/*'], fallback_format: html, prefer_extension: true }

我将priorities: ['html', '*/*']更改为priorities: ['html', 'application/javascript', 'text/css', '*/*'],现在一切正常。

答案 4 :(得分:0)

我终于找到了解决方法!我在这个问题上工作了几个小时!您写道:

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

但是'cssrewrite'过滤器不接受@FooBundle语法!您必须这样做:

php app/console assets:install

Symfony将创建:

web/bundles/yourbundle/css/main.css

现在,在您的树枝模板中,替换:

'@FooBundle/Resources/public/css/main.css' filter='cssrewrite'

具有:

'bundles/yourbundle/css/main.css' filter='cssrewrite'

希望它会帮助别人! (它是用Symfony文档编写的。.^^)