Rails railties gem错误“undefined method: 'less'”

12

我刚刚用 gem updatebundle update 更新了我的 Rails 应用程序的 gem。当我尝试使用 rails s 进行测试时,它会给我这个错误:

/Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/railtie/configuration.rb:85:inmethod_missing': undefined method less' for #<Rails::Application::Configuration:0x0000010308a300> (NoMethodError)

剩下的错误信息如下所示:

from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/twitter-bootstrap-rails-2.1.6/lib/twitter/bootstrap/rails/engine.rb:15:in `block in <class:Engine>'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `instance_exec'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/initializable.rb:30:in `run'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/initializable.rb:55:in `block in run_initializers'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `each'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/initializable.rb:54:in `run_initializers'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/application.rb:136:in `initialize!'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
    from /Users/Richard/Code/Rails/rgsimms/config/environment.rb:5:in `<top (required)>'
    from /Users/Richard/Code/Rails/rgsimms/config.ru:4:in `require'
    from /Users/Richard/Code/Rails/rgsimms/config.ru:4:in `block in <main>'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/rack-1.4.1/lib/rack/builder.rb:51:in `instance_eval'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/rack-1.4.1/lib/rack/builder.rb:51:in `initialize'
    from /Users/Richard/Code/Rails/rgsimms/config.ru:1:in `new'
    from /Users/Richard/Code/Rails/rgsimms/config.ru:1:in `<main>'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/rack-1.4.1/lib/rack/builder.rb:40:in `eval'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/rack-1.4.1/lib/rack/builder.rb:40:in `parse_file'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/rack-1.4.1/lib/rack/server.rb:200:in `app'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/commands/server.rb:46:in `app'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/rack-1.4.1/lib/rack/server.rb:301:in `wrapped_app'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/rack-1.4.1/lib/rack/server.rb:252:in `start'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/commands/server.rb:70:in `start'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
    from /Users/Richard/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

这是Twitter Bootstrap gem出错了吗?我还在学习,怎么修复它呢?非常感谢任何帮助。

1个回答

34

Twitter Bootstrap gem 依赖于 less gem。来自文档

gem "therubyracer"
gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS
gem "twitter-bootstrap-rails"

我个人发现将文件从官网直接转储到供应商/资产目录中更容易使用Twitter Bootstrap。通过Gem更新比手动更新略微容易,但是当更新Bootstrap时,您想要“手动”完成并且“逐个检查”所有内容-我更喜欢额外的努力,以确保它不轻易被完成。而且,很难从gem中删除某些(例如)响应部分,而不(就我所知)“取消指定”样式。响应式的东西在大小方面也会随版本变化而发生变化,因此您不能仅依赖于其全部正常工作。我真的看不出使用gem的任何优势。

更新

现在有一个官方的Gem,我建议检查一下:https://github.com/twbs/bootstrap-sass


1
谢谢,先生。我已经删除了bootstrap gem,现在它又可以工作了。我是在Railscast上看到它后使用的。 - Tamachan87
1
由于某种原因,更新Twitter时出现了这个错误——之前的less和therubyracer已经在我的gemfile中了,而我不知道为什么。请注意,在Heroku上不推荐使用therubyracer:https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar#troubleshooting - Peter Ehrlich
不好的想法。找出为什么宝石(gem)不能正常工作。现在,每次您想要从bootstrap获得修复或版本增量时,都必须手动更新此代码块。如果您想锁定特定版本,请在Gemfile中执行该操作。 - Bill Leeper
我对将源代码放入资产文件夹提出了异议。更好的解决方案是修复您的依赖项。还应该注意,由于twitter-bootstrap-rails是大多数人的主要组,因此在资产组部分中使用less-rails将无法解决此问题,它也必须在主要部分中,这是大多数人在升级时看到此错误的主要问题。在包含less-rails之前的bootstrap rails 2.1.6版本中,您要么不需要less-rails,要么可以将其放入资产组中。 - Bill Leeper
避免它的另一个好理由 - http://blog.nvisium.com/2014/03/reflected-xss-vulnerability-in-twitter.html - Brad Werth
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接