2012-04-22 80 views
0

我正在嘗試按照本指南創建Bundler的寶石:http://rakeroutes.com/blog/lets-write-a-gem-part-one/。在這裏面,它說:與Bundler創建寶石

我把我的第一次看通過gemspec ,我需要增加更多的要求陳述我開發我的 寶石後不正確思想。情況並非如此:這些文件只需要在git中。

我想清理一些舊的寶石來使用這個約定,但是當我安裝我的寶石時,其他文件中的類不可用。我有幾個目錄嵌套在我的/ lib目錄下,但我不認爲這會是一個問題。有什麼簡單的事情可以忽略,以防止我的其他文件被要求?任何幫助,將不勝感激。

回答

1

在鏈接時,他說,他並不需要增加大量的「要求」語句,它一定是將文件添加到s.filess.executables,並s.test_files陣列 - 這些確定哪些文件被打包成寶石和什麼文件被忽略。從gem規範中可以看到,在某些目錄中,git所跟蹤的內容將包含在打包的gem中。

Ruby的require是一個不同的故事。標準要求規則仍然適用。

當您運行require "foo"時,Ruby的寶石系統通過爲Ruby添加一堆不同的地方來尋找「foo.rb」。如果"lib"是您的寶石的唯一需求路徑,那麼當您的require "my_gem" Ruby僅運行lib/my_gem.rb中的代碼時。如果lib/my_gem.rb不是require gem中的任何其他文件,那麼Ruby沒有看到它們,所以當您嘗試使用這些文件中的類時,您會遇到未定義的常量錯誤。例如,你可以看看我寫的兩個簡單的寶石;兩者均以bundle gemHashToHiddenFieldsSimpleStats開始。在這兩個寶石中,lib/中的主要Ruby文件都需要加載所有寶石才能正常工作。例如,hash_to_hidden_fields.rb需要action_view/helpers/hash_to_hidden_​​fields以便ActionView::Helpers::HashToHiddenFields常量+模塊存在,因此我們可以將它包含到ActionView::Base中。

希望能回答這個問題。我知道一段時間以來,Ruby對我的要求很模糊。

+0

完美,謝謝Brian! – shanemcd 2012-04-23 14:15:17