2013-06-20 69 views
3

我已經保存在/ lib目錄(/lib/buffer_app.rb)的自定義類:生產未初始化的常數自定義類(Heroku的)

require 'HTTParty' 

class BufferApp 
    include HTTParty 
    base_uri 'https://api.bufferapp.com/1' 

    def initialize(token, id) 
    @token = token 
    @id = id 
    end 

    def create(text) 
    message_hash = {"text" => text, "profile_ids[]" => @id, "access_token" => @token} 

    response = BufferApp.post('/updates/create.json', :body => {"text" => text, "profile_ids[]" => @id, "access_token" => @token}) 
    end 
end 

我試圖在使用這個該類主動管理資源,並得到以下錯誤,當生產(Heroku上):

NameError (uninitialized constant Admin::EventsController::BufferApp): 

值得注意我有這個線在我的application.rb中,並且此功能在發展本地工作:

config.autoload_paths += %W(#{Rails.root}/lib) 

如果我嘗試include BufferApprequire 'BufferApp'該行本身會導致錯誤。我有一個命名空間問題?這是否需要成爲一個模塊?或者這是一個簡單的配置監督?

+0

你可以覆蓋'production.rb'中的'config.autoload_paths'嗎? – jokklan

+0

@jokklan不幸的是,不......我只是做了一個項目搜索,這是我改變autoload_paths的唯一位置。 –

回答

2

錯誤行說,這一切,你應該引用類作爲::BufferApp

+1

詳細說明:您需要在前面使用'::'來指定'BufferApp'是在根名字空間(沒有命名空間)中定義的。否則它會嘗試在當前命名空間('Admin :: EventsController')中找到'BufferApp'。 – jokklan

+0

這使得總體感覺...謝謝你們!但是,我仍然得到以下內容:NameError(未初始化的常量BufferApp),這可能是lib目錄未正確加載的結果? –

+0

我在require中包含了路徑並且能夠正常工作:需要「#{Rails.root}/lib」+'/buffer_app.rb'雖然我不認爲這是理想的 –

8

我有完全相同的問題和Rails 5阿爾法。爲了解決這個問題,我不得不手動要求文件:

require 'buffer_app' 

,而不是:(require 'BufferApp'

即使米哈爾Szyndel的回答使偉大的意義對我來說,手動要求的文件後,前綴::到在我的情況下,常數不具影響力。

無論如何,我不滿意需要解決方案的手冊,因爲我需要添加特定於環境的代碼。爲什麼我不需要手動開發文件?

+1

與Rails 5相同...奇。 – Dudo

+1

同樣發生在我的軌道上5 – Jacka

+0

在Rails 5中也是這樣。並且**爲什麼我不需要在開發時手動要求這些文件?** – leomperes

1

更改此

config.autoload_paths += %W(#{Rails.root}/lib) 

這個

config.eager_load_paths += %W(#{Rails.root}/lib) 

eager_load_paths將得到即時加載在生產和點播的發展。這樣做,你不需要明確要求每個文件。

查看更多有關this answer的信息。

相關問題