我有一个Rails应用程序收到以下错误:
Less::ParseError in Home#index
Showing /Users/burtondav/sites/requestsys/app/views/layouts/application.html.erb where line #20 raised:
Cannot call method 'charAt' of undefined
(in /Users/burtondav/sites/requestsys/app/assets/stylesheets/bootstrap_and_overrides.css.less)
Extracted source (around line #20):
17: }
18: </style>
19:
20: <%= stylesheet_link_tag "application", :media => "all" %>
我正在使用的一些GEMS:
gem 'rails', '3.2.11'
gem 'twitter-bootstrap-rails'
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'less-rails'
gem 'commonjs'
gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
Bootstrap使用LESS似乎是个问题。
我已经阅读了其他几个类似的问题。所以,我将Ruby升级到1.9.3p374。但是,这并没有解决问题。
有什么想法吗?
谢谢!
更新
这是bootstrap_and_overrides.css.less
@import "twitter/bootstrap/bootstrap";
@import "twitter/bootstrap/responsive";
// Set the correct sprite paths
@iconSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings");
@iconWhiteSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings-white");
答案 0 :(得分:4)
我暂时解决了这个问题。 mixins.less有一个语法更改,似乎只有LESS.js支持
举个例子:
2.3之后的版本:
.offsetX (@index) when (@index > 0) {
.offset@{index} { .offset(@index); }
.offset@{index}:first-child { .offsetFirstChild(@index); }
.offsetX(@index - 1);
}
2.3之前的版本
.offsetX (@index) when (@index > 0) {
(~'.offset@{index}') { .offset(@index); }
(~'.offset@{index}:first-child') { .offsetFirstChild(@index); }
.offsetX(@index - 1);
}
在添加(〜“”)之后,它被删除了(你必须查看2.3中的差异和之前的版本,看看它被删除的地方,我的所有资产再次编译,没有错误,仍然使用LESS。
这种变化只在mixins.less btw中,并且总共只有5或6行。
答案 1 :(得分:3)
遇到同样的失败。通过将twitter-bootstrap-rails回滚到版本2.1.4
来修复它(截至撰写本文时,最新版本为2.2.4
)
# Gemfile
...
group :assets do
...
gem "therubyracer"
gem "less-rails"
end
gem "twitter-bootstrap-rails", '2.1.4'
答案 2 :(得分:1)
在评论中跟进你。似乎答案在于用twitter-bootstrap-rails或less-rails描述你的问题打开一个github问题。您还可以关注原始问题:https://github.com/seyhunak/twitter-bootstrap-rails/issues/72
否则会为您提供两种解决方案:
答案 3 :(得分:0)
我以某种迂回的方式解决了这个问题,所以YMMV。在我的情况下,这个错误是由更新twitter-bootstrap-rails从2.1.6到2.2.5引起的,没有对任何文件进行任何编辑。因此,我试图在开发过程中重现这一点,我注意到404s对于半身图标的请求:
ActionController::RoutingError (No route matches [GET] "/assets/twitter/bootstrap/glyphicons-halflings"):
由于我使用的是font-awesome,我只是从CSS中删除了对这些sprite的所有引用:
# bootstrap_and_override.less
//@iconSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings");
//@iconWhiteSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings-white");
// Glyphicons
//@import "twitter/bootstrap/sprites.less";
这又导致了这个错误:
variable @fontAwesomeEotPath_iefix is undefined
这是一个常见的升级问题,solved here添加此行:
@fontAwesomeEotPath_iefix: asset-path("fontawesome-webfont.eot#iefix");
之后,一切都恢复了。