내가 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]
http://www.ruby-forum.com/topic/51795 그게 도움이 되나요? 대신 정의 된? (Less :: Engine)을 사용하는 것이 좋습니다. –
@JoePym 정말 아닙니다. 그 스레드는'const_defined? '에 대해 정의 된 상수를 보지 못합니다. 제 경우에는 반대입니다 : const는 빠졌지 만'const_defined? '는 확신하지 못합니다. – artemave
그냥 생각 :이 일이 시작된 같은시기에, heroku는 루비를 업그레이드했습니다. https://devcenter.heroku.com/changelog-items/189?utm_source=dlvr.it&utm_medium=twitter 로컬에서는 루비 버전이 있지만 문제 – artemave