我在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]
如果您最近刚刚在3.2内升级了rails版本。你会发现less在较早的版本(如3.2.2)中"存在",而在较晚的版本(如3.2.9)中不存在。
我还没有完全调查这个问题,但是我注意到当我从3.2.2升级到3.2.9时,我得到了一些"较少"的问题。
欢呼