Rails 3.2.8,heroku:未初始化的常量Less :: Engine

时间:2012-12-20 17:10:34

标签: ruby-on-rails ruby heroku

我在heroku的延迟工作中看到这个错误,这对我来说没有意义:

{uninitialized constant Less::Engine
  (in /app/app/assets/stylesheets/share_and_earn_recommendation_email.css.less)
/app/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/lib/tilt/css.rb:60:in `prepare'
...

为什么没有意义?因为css.rb看起来像这样:

def prepare
  if ::Less.const_defined? :Engine
    @engine = ::Less::Engine.new(data) # line 60
  else
  ...

这意味着如果Less::Engine未定义,则无法点击第60行。我错过了什么?

修改

来自heroku控制台的更好的演示:

irb(main):008:0> ::Less.const_defined? :Engine 
=> true
irb(main):009:0> ::Less::Engine
NameError: uninitialized constant Less::Engine

编辑2

它变得更有趣:

irb(main):011:0> ::Less.const_defined? :Engine, false 
=> false

不同之处在于后者不会搜索祖先。但是没有祖先,所以它不应该有所作为:

irb(main):012:0> ::Less.ancestors
=> [Less]

1 个答案:

答案 0 :(得分:1)

如果您刚刚在3.2.x堆栈中升级了rails版本,您会发现在3.2.2之类的早期版本中“less”存在,而在3.2.9等更高版本中则不存在。

我还没有完全调查过这个问题,但我注意到当我从3.2.2升级到3.2.9时,我遇到了一些“少”问题。

干杯