【问题标题】:Assetic bad css files link in prod env产品环境中的资产坏 css 文件链接
【发布时间】:2013-11-15 00:22:53
【问题描述】:

我正在尝试在生产环境上下文中测试我的应用程序。问题是 Assetic 无法正常工作。

css文件和js文件没有加载。

这就是我所做的:

  • 我已设置:$kernel = new AppKernel('prod', true);
  • 我执行了命令:

    php 应用程序/控制台缓存:清除 --env=prod --no-debug php 应用程序/控制台资产:转储 --env=prod --no-debug

到目前为止,没有问题,我的文件已经创建:

01:07:26 [file+] /var/www/visual-immersion/app/../web/js/b0c2086.js
01:07:26 [file+] /var/www/visual-immersion/app/../web/js/a49caf1.js
01:07:26 [file+] /var/www/visual-immersion/app/../web/css/a580ac9.css

但是当我启动我的网页时,没有 css,没有 js。如果我检查我的源代码页,我可以看到:

                <link rel="stylesheet" type="text/css"href="/css/a580ac9_part_1_home_1.css">

            <link rel="stylesheet" type="text/css" href="/css/a580ac9_layout_2.css">

            <link rel="stylesheet" type="text/css" href="/css/a580ac9_style_3.css">

            <link rel="stylesheet" type="text/css" href="/css/a580ac9_font_4.css">

            <link rel="stylesheet" type="text/css" href="/css/a580ac9_responsive_5.css">

            <link rel="stylesheet" type="text/css" href="/css/a580ac9_animations_6.css">

            <link rel="stylesheet" type="text/css" href="/css/a580ac9_personalized-responsive_7.css">

就好像我在开发环境中一样!

所以我也清理了 dev env 中的缓存,并重新启动了 prod env 的进程...没有成功。

你知道什么是问题吗?

我添加了我的 config.yml :

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }

framework:
    #esi:             ~
    #translator:      { fallback: %locale% }
    secret:          %secret%
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_proxies: ~
    session:         ~
    fragments:       ~

# Twig Configuration
twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    bundles:        [VisualImmersionAdminBundle, VisualImmersionSiteBundle]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~
        #closure:
        #    jar: %kernel.root_dir%/Resources/java/compiler.jar
        #yui_css:
        #    jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: %kernel.root_dir%/data/data.db3
        # path:     %database_path%

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

# Swiftmailer Configuration
swiftmailer:
        transport: gmail
        username:  contact@visual-immersion.com
        password:  mypassword

编辑:

我用资产重试了该过程:安装没有成功。

编辑 2:

在我的网络浏览器开发工具中,如果我添加以下行:

<link rel="stylesheet" type="text/css" href="/css/a580ac9.css">

这是工作。我真的认为 Assetic 将文件加载为 dev env 而不是 prod env。 有什么想法吗?

编辑 3:

如果有帮助,我会添加布局或托管 css 文件...

{% stylesheets '@VisualImmersionSiteBundle/Resources/public/css/*'  filter='cssrewrite'
            'css/stylesheets/layout.css'
            'css/stylesheets/style.css'
            'css/stylesheets/font.css'
            'css/stylesheets/responsive.css'
            'css/stylesheets/animations.css'
            'css/stylesheets/personalized-responsive.css'
        %}
            <link rel="stylesheet" type="text/css" href="{{ asset_url }}">

        {% endstylesheets %}

编辑 4:

我尝试像这样更改我的样式表过滤器:

{% stylesheets filter='cssrewrite'
        'css/stylesheets/*'
        'bundles/visualimmersionsite/css/*'
    %}

但没有成功。

【问题讨论】:

  • 我想知道 use_controller: false 是否在 config.yml 中有效。因为如果我理解的话,Assetic 仍然在尝试动态加载文件,对吧?

标签: css symfony http-status-code-404 production assetic


【解决方案1】:

尝试使用:

php app/console assets:install web --symlink

这样,您将拥有一个符号链接,而不是拥有每个捆绑资源的副本,因此无需更新。

来自文档:

使用 cssrewrite 过滤器时,不要使用 @AcmeFooBundle 语法。

试试这个方法:

{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

【讨论】:

  • 我忘了说,但我也说了。此外,图像是存在的。仅缺少 js 和 css 文件。真正奇怪的是,它显示的文件应该在开发模式下而不是在生产模式下生成。
  • 可能是浏览器缓存?你检查过吗?
  • 也许我忘记在我的 config.yml、app.php 或其他文件中设置一个参数来传递产品?你看到什么不正常的东西了吗?
  • 我测试了你删除css注释的解决方案,但不是更好。另请注意,直接在网络中的文件也很重要。
【解决方案2】:

将 prod 设置为 false 不是正在发生的事情。

您将环境设置为 prod 和 debug 为 false:

class Kernel ...

public function __construct($environment, $debug)

【讨论】:

    【解决方案3】:

    无意中发现的:

    Assetic not creating combined links

    它确实有效。我一点都不明白。对于 prod 工作,您必须将 'prod' 设置为 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-29
      • 2020-06-13
      • 2019-03-29
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多