2012-12-20 3 views
4

내가 Heroku가에 지연 작업에서이 오류를보고하고 그것이 나에게 아무 의미하지 않습니다 :레일 3.2.8, 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 

differe nce는 후자가 조상을 검색하지 않는다는 것입니다. 그러나 거기에는 조상없는, 그래서 차이를 수행하지 않아야합니다

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

http://www.ruby-forum.com/topic/51795 그게 도움이 되나요? 대신 정의 된? (Less :: Engine)을 사용하는 것이 좋습니다. –

+0

@JoePym 정말 아닙니다. 그 스레드는'const_defined? '에 대해 정의 된 상수를 보지 못합니다. 제 경우에는 반대입니다 : const는 빠졌지 만'const_defined? '는 확신하지 못합니다. – artemave

+0

그냥 생각 :이 일이 시작된 같은시기에, heroku는 루비를 업그레이드했습니다. https://devcenter.heroku.com/changelog-items/189?utm_source=dlvr.it&utm_medium=twitter 로컬에서는 루비 버전이 있지만 문제 – artemave

답변

1

당신이 최근에 적은 3.2과 같은 이전 버전의 "존재"는 것을 발견 할 것이다 3.2.x 스택 내에서 레일 버전을 업그레이드 한 경우. 2이고 3.2.9 같은 이후 버전에는 없습니다.

문제를 완전히 조사하지는 않았지만 3.2.2에서 3.2.9로 업그레이드 할 때 "덜"문제가 있음을 발견했습니다.

건배

+0

정식 버전 정보 (3.2.8)로 질문 제목이 업데이트되었습니다. 처음에는 절름발이 인 것을 유감스럽게 생각합니다! – artemave

+0

또한 이것은 '덜'문제는 아닙니다. 'less'는 요즘에'Less :: Engine'이 정의되어 있지 않습니다. '틸트 (tilt) '는 이전 버전의'less'를 따르는 체크를 가지고 있습니다 (이것은 제 경우는 아닙니다) – artemave

관련 문제