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
否则,将为您提供两种解决方案:
- 使用SASS版本: https : //github.com/jlong/sass-twitter-bootstrap
- 使用其网站上提供的本机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");
在那之后,一切都在恢复。