当我尝试运行rake assets:precompile
时,我的rails应用程序出现了一个奇怪的错误。它看起来像这样:
rake aborted!
Invalid US-ASCII character "\xE2"
(in /Users/lee/Code/draper/app/assets/stylesheets/application.css.scss)
(sass):9
我不确定无效字符可能会进入我的代码。我正在使用Twitter Bootstrap(boostrap-sass gem),我的bootstrap_and_overrides.css.scss
文件似乎是罪魁祸首。我已经尝试在文本配合中从头开始重新创建这个文件,以获取任何奇怪的角色,但这不起作用。唯一可行的方法是将其添加到bootstrap_and_overrides.css.scss
的顶部:
@charset "UTF-8";
这允许我运行rake资产:预编译然后部署到Heroku,但这似乎是一个黑客和一个肮脏的修复。我可以将其他应用程序部署到使用bootstrap-sass的Heroku,并且Heroku能够运行rake资产:部署时预编译。现在,解决它的唯一方法是包括@charset "UTF-8";
,然后在部署到Heroku之前在本地运行rake assets:precompile
,以便在部署期间跳过该步骤。
我无法弄清楚我在哪里出错了。
答案 0 :(得分:5)
检查您的CSS文件。字符\xE2
通常与双引号字符相关,该字符不是ASCII字符集的一部分。在编辑器中,它们通常看起来像一个更倾斜的双引号。 “mystring”
vs "mystring"
使用@charset
声明不是黑客,但如果您不需要使用UTF-8字符,那么最好将其删除。
答案 1 :(得分:2)
声明文件的正确编码不是黑客攻击,文本文件总是需要声明的编码和物理编码。无论如何,你可以用文件上的iconv删除所有非ascii字符:
iconv -t ASCII//IGNORE -f UTF8 < application.css.scss > application.css.scss.ascii
然后生成的文件几乎可以用于任何编码。