4

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]
4

1 に答える 1

1

最近 3.2.x スタック内で Rails バージョンをアップグレードした場合、3.2.2 などの以前のバージョンでは less が「存在」し、3.2.9 などの新しいバージョンでは存在しないことがわかります。

この問題を完全に調査したわけではありませんが、3.2.2 から 3.2.9 にアップグレードしたときに、いくつかの「少ない」問題があることに気付きました。

乾杯

于 2012-12-20T23:01:16.833 に答える