2012-12-20 33 views
4

我看到這個錯誤在Heroku上延遲的工作,這是沒有意義對我說:的Rails 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 
    ... 

這意味着它是不可能打60行,如果Less::Engine是不確定的。我錯過了什麼?

編輯

更妙的是從Heroku的控制檯演示:

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

EDIT 2

它變得更有趣:

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

各色的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.x中堆內的軌道版本,你會發現少即是在早期版本像3.2「存在」。 2並且在像3.2.9之類的更新版本中不存在。

我還沒有完全調查過這個問題,但我注意到當我從3.2.2升級到3.2.9時,我得到了一些「較少」的問題。

乾杯

+0

更新的問題標題包含完整版本信息(3.2.8)。對不起,首先是跛腳! – artemave

+0

另外,這不是一個「少」的問題。 'less'確實沒有現在定義的'Less :: Engine'。 '傾斜'有檢查,以符合較早版本的'少'(這不是我的情況) – artemave

相關問題