Symfony 2资产过滤器异常中的指南针

Posted

技术标签:

【中文标题】Symfony 2资产过滤器异常中的指南针【英文标题】:Compass in Symfony 2 assetic Filter Exception 【发布时间】:2015-06-13 10:22:18 【问题描述】:

我已经在我的 symfony 2 项目中安装了 compass。现在我想将资产过滤器与指南针结合使用。 我正在使用 Windows 7。

我认为它几乎可以工作,但我仍然收到此错误:

[Assetic\Exception\FilterException]
An error occurred while running:
"C:\Ruby21-x64\bin\ruby.EXE" "C:\Ruby21-x64\bin\compass.BAT" "compile" "C:\
Users\tommie\AppData\Local\Temp" "--boring" "--config" "C:\Users\tommie\App
Data\Local\Temp\ass4325.tmp" "--sass-dir" "" "--css-dir" "" "C:/Users/tommi
e/AppData/Local/Temp/ass4326.tmp.scss"
Error Output:
C:/Ruby21-x64/bin/compass.BAT:1: syntax error, unexpected tCONSTANT, expect
ing end-of-input

我在 html (twig) 中的代码:stylesheets.html.twig

% stylesheets filter="compass" output='css/compiled/*.css'
   "@AcmeSassDemoBundle/Resources/assets/css/base.scss"
%
<link rel="stylesheet" href=" asset_url " />

% endstylesheets %

base.html.twig:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>% block title %Sass Demo!% endblock %</title>
    #% block stylesheets %% endblock % #

    % include "AcmeSassDemoBundle:Demo:stylesheets.html.twig" %
    <link rel="shortcut icon" href=" asset('favicon.ico') " />
</head>
<body>
    <div id="header">
        % block header %
            <h1>Sass Demo</h1>
            <div class="logo">this container is half as big as the sass.gif's dimension</div>
        % endblock %
    </div>

    <div id="menu">
        <ul>
            <li class="add"><a href="#">add something</a></li>
            <li class="edit"><a href="#">edit something</a></li>
            <li class="delete"><a href="#">delete something</a></li>
        </ul>
    </div>

    <div id="content">
        % block body %hello sass!% endblock %
    </div>

    <div id="footer">
        % block footer %awesome footer goes here ...% endblock %
    </div>
    % block javascripts %% endblock %</
</body>

index.html.twig:

% extends 'AcmeSassDemoBundle:Demo:base.html.twig' %

% block body %

<div class="content">
  hello world
    <div class="sub">
       This text should be in green ...
       <div class="sub">
        ... and this one in blue!
    </div>
</div>

我的 config.yml 过滤器资产配置:

# Assetic Configuration
assetic:
    debug: false
    use_controller: true# default: true
    filters:
        sass:    ~
        compass: 
            compass:
                bin: C:\Ruby21-x64\bin\compass.bat

base.scss

$main-background-color: #FFF;
$main-color: #FFF;
$light-color: #759E1A;
$link-color: #0088CC;

body 
    background-color: #CCC;


@mixin rounded($side, $radius: 10px) 
    border-radius: $radius;
    border-#$side-radius: $radius;
    -moz-border-radius-#$side: $radius;
    -webkit-border-#$side-radius: $radius;


@import "header.scss";
@import "menu.scss";
@import "content.scss";
@import "footer.scss";

【问题讨论】:

是错字还是你的配置中有两次compass?我只有一个在我的。尝试删除一个like so。能否请您添加您的base.scss 嗨 ferdynator,更新了我的问题并添加了 base.scss。还尝试了您的配置,但仍然无法正常工作。错误:“/usr/bin/ruby”“C:\Ruby21-x64\bin\compass.bat”“编译”“C:\Windows\Temp”“--boring”“--config”“C:\Windows \Temp\assB498.tmp" "--sass-dir" "" "--css-dir" "" "C:/Windows/Temp/assB499.tmp.scss" 看看这个指南也许会有所帮助:***.com/questions/16003621/… 你能告诉我们compass.BAT的内容吗?该文件似乎包含错误。 【参考方案1】:

我不想让你气馁,但是使用 Windows 和 Ruby,这是有史以来最糟糕的组合,(节点也是,具有长树子目录的 node_module,使 Windows 限制为 256 个字符,并且通过安装包)。我的观点就像将您的项目移动到与您的服务器配置类似的虚拟机的替代方法。 (VirtualBox 和 Vagrant)

Linux 对 Ruby 更友好(它支持他)并且有符号链接和长路径名;

修补: https://symfony.com/doc/2.8/setup/homestead.html

也许这个旧链接也会有所帮助: How to use SCSS filter in Symfony2 under Windows?

【讨论】:

【参考方案2】:

这很可能是您已经尝试/注意到的事情,但以防万一:

这个错误看起来更像是 ruby​​ 解释器正在死去,而不是它在你的 scss / twig 上窒息。这在一定程度上是有道理的,因为 ruby​​ 不希望使用 .BAT 脚本。

通常只使用'compass',而不是'compass.BAT',它通常只是用'compass'调用ruby。

"C:\Ruby21-x64\bin\ruby.EXE" "C:\Ruby21-x64\bin\compass.BAT" "编译" "C:\Users\tommie\AppData\Local\Temp" "--boring" "--config" "C:\Users\tommie\App 数据\Local\Temp\ass4325.tmp" "--sass-dir" "" "--css-dir" "" "C:/Users/tommi e/AppData/Local/Temp/ass4326.tmp.scss"

正常情况下

"C:\Ruby21-x64\bin\ruby.EXE" "C:\Ruby21-x64\bin\compass" "编译" "C:\Users\tommie\AppData\Local\Temp" "--boring" "--config" "C:\Users\tommie\App 数据\Local\Temp\ass4325.tmp" "--sass-dir" "" "--css-dir" "" "C:/Users/tommi e/AppData/Local/Temp/ass4326.tmp.scss"

基本上,将 compass.bin 路径设置为不包含 .bat,您可能会没事的。这通常在您的 config.yml 中的assetic.filters.compass.bin 中

另见https://github.com/symfony/AsseticBundle/issues/158

这也表明特殊字符不太受欢迎,不确定它对目录名中的空格的喜爱程度。如果没有 .bat 仍然无法工作,这些也可能导致窒息

【讨论】:

谢谢也试过这个,但不幸的是这不是问题。我仍然遇到同样的错误。

以上是关于Symfony 2资产过滤器异常中的指南针的主要内容,如果未能解决你的问题,请参考以下文章

使用 symfony2 clear cache 命令不刷新静态资产

如何为资产的 TypeScript 过滤器指定 tsconfig.json?

Symfony2 中的 Twig CamelCase 过滤器

尝试使用 Windows 7 为 Symfony2 项目转储资产时出现运行时异常

symfony 5 表单实体类型过滤器选择基于选择的其他实体类型选择

Symfony 资产:转储运行时异常