2014-05-15 32 views
0

我寫了一個發電機,創建以下紅寶石文件和文件夾:在test.rb文件本地寶石類沒有Rails中找到應用

app/tests/test.rb 

我有一個Test類,看起來像這樣:

class Test < MyCustomModule::MyCustomClass::Base 
... 
end 

現在,我想在show.html.erb文件之一,以使用其功能創造這樣的新實例:

Test.new(...).render(...).html_safe 

,但我收到以下錯誤:

uninitialized constant MyCustomModule::MyCustomClass::Base 

我有使用以下answer鏈接我的寶石和我的Rails應用程序。它似乎工作,因爲我能夠使用發生器,但在rails應用程序中看不到gem模塊和類。

任何人都可以告訴如何解決這個問題?


我已經嘗試按照發布here,但仍然沒有改變提示:

  1. 添加config.autoload_paths += Dir["#{config.root}/lib/**/"]application.rb文件
  2. 我創建了我的寶石結構看CarrierWave寶石,所以命名應該是正確的
  3. 我嘗試禁用config.threadsafe!但它已被禁用,因爲config.cache_classesconfig.eager_load被設置爲false發展

    DEPRECATION WARNING: config.threadsafe! is deprecated. Rails applications behave by default as thread safe in production as long as config.cache_classes and config.eager_load are set to true.

而且,看着adding-asset-to-your-gems軌文件,據說:

A good example of this is the jquery-rails gem which comes with Rails as the standard JavaScript library gem. This gem contains an engine class which inherits from Rails::Engine. By doing this, Rails is informed that the directory for this gem may contain assets and the app/assets, lib/assets and vendor/assets directories of this engine are added to the search path of Sprockets.

所以,我已經做到了這一點,並把我的模型類文件在assets文件夾中,但結果是一樣的。


下面的截圖展示我真實的案例:

  1. 下面的屏幕截圖顯示我的寶石文件結構

    enter image description here

  2. 在這裏你可以看到我是如何加載寶石在我的Rails應用程序中Gemfile

    gem 'thumbnail_hover_effect', '0.0.3', github: 'thumbnail_hover_effec/thumbnail_hover_effec', branch: 'master' 
    
  3. 然後我使用寶石發生器用cutstom名紅寶石文件app/thumbnails/test.rb文件夾下面的代碼:

    class Test < ThumbnailHoverEffect::Image::Base 
    ... 
    end 
    

    ,並試圖使用Test類給我uninitialized constant ThumbnailHoverEffect::Image::Base錯誤。

  4. 早在創業板上市的文件,這些都是thumbnail_hover_effect文件看起來像

    require 'thumbnail_hover_effect/version' 
    require 'thumbnail_hover_effect/engine' 
    require 'thumbnail_hover_effect/image' 
    
    module ThumbnailHoverEffect 
        # Your code goes here... 
    end 
    

    和鋤image文件看起來像:

    module ThumbnailHoverEffect 
    # 
        class Image 
        ... 
        end 
    end 
    
+0

請問您能提供真實世界的代碼嗎?什麼是確切的類名,什麼是文件名?你確定所有東西都得到了正確的加載(我懷疑它)。 – phoet

+0

@phoet對不起,爲了重播。我添加了一些真實的代碼,如果您需要了解其他內容,請告訴我。 – gotqn

+0

和'ThumbnailHoverEffect :: Image :: Base'應該來自哪裏? – phoet

回答

1

從您發佈什麼這裏沒有定義ThumbnailHoverEffect::Image::Base。 Rails的自動加載約定(你不應該依賴於gem btw,稍後更多)將在thumbnail_hover_effect/image/base.rb中尋找這個文件,但是你打印的目錄結構沒有那個。當然,你可以在thumbnail_hover_effect/image.rb中定義這個類,它可以工作,但是你發佈的簡要代碼片段不會顯示。那麼ThumbnailHoverEffect::Image::Base在哪裏定義?

如果它在thumbnail_hover_effect/image/base.rb那麼這將表明文件沒有被加載。您可以通過將puts 'loading this stupid file'置於thumbnail_hover_effect/image/base.rb的頂部來檢查此問題。這將允許您通過查看您的類的定義是否存在問題或問題是否與加載適當的文件相分離。調試是關於平分問題的。

+0

它甚至不像是有一個'ThumbnailHoverEffect :: Image :: Base' – phoet

+0

當然沒有'ThumbnailHoverEffect :: Image :: Base' - 我還沒有定義這樣的類。我在這種愚蠢的情況下結束了,因爲我是ruby新手,他決定使用有效的gem結構和代碼作爲模板。 – gotqn