Rails无法调用未定义的方法’charAt’

我有一个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:  19: 20:  "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。 但是,这并没有解决问题。

有任何想法吗?

谢谢!

UPDATE

这是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"); 

在评论中跟进你。 似乎答案在于用twitter-bootstrap-rails或less-rails描述你的问题打开一个github问题。 你也可以关注原始问题: https : //github.com/seyhunak/twitter-bootstrap-rails/issues/72

否则,将为您提供两种解决方案:

  1. 使用SASS版本: https : //github.com/jlong​​/sass-twitter-bootstrap
  2. 使用其网站上提供的本机css版本: http : //twitter.github.com/bootstrap/customize.html

我暂时解决了这个问题。 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顺便说一下,只有大约5或6行。

得到了同样的失败。 通过将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' 

我以一种迂回的方式解决了这个问题,所以YMMV。 在我的情况下,这个错误是由更新twitter-bootstrap-rails从2.1.6到2.2.5引起的,没有对任何文件进行任何编辑。 因此,我试图在开发过程中重现这一点,我注意到404s对halfling图标的请求:

 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 

这是一个常见的升级问题,通过添加以下行解决了这个问题:

 @fontAwesomeEotPath_iefix: asset-path("fontawesome-webfont.eot#iefix"); 

在那之后,一切都在恢复。