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

时间:2013-02-03 17:20:34

标签: ruby-on-rails twitter-bootstrap

我有一个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");

4 个答案:

答案 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

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

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

答案 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"); 

之后,一切都恢复了。