2012-10-10 74 views
0

從我的理解(以及我所看到的使用這個)如果一個項目有一個gemfile,它只能訪問Gemfile中的gem(或更多特別是Gemfile.lock文件)。配置一個Ruby項目來使用gemfile之外的gem

我希望能夠使用一些安裝在系統上的gem,但不是特別在Gemfile.lock文件中 - 我該如何解決這個問題?

對我的推理:我們有一個開發人員VM設置,確保一切都是最新的;但是如果沒有在項目中運行bundle update,我們使用的工具(依賴於Gem)無法更新(如果不在Gemfile中,甚至不能使用)。

我可以保持gem更新,但不能強制項目在不更新Gemfile.lock信息的情況下使用版本 - 所以我寧願讓項目使用全部或特定的系統寶石,只需將Gemfile作爲「讓系統與項目保持同步的快速方式」。

另一個注意:應用程序使用rake任務來操作(工具有一個gem,gem尋找一個特定的rake文件進行自定義配置)。

回答

0

你只需要圖書館(閱讀寶石)。

您可以在使用寶石功能的特定文件中要求它,或者您可以在config/application.rb(在Rails 3中)中要求它使其可用於整個應用程序。

爲了安全起見,確保寶石可用:

if Gem::Specification::find_by_name('my_gem') 
    require 'my_gem' 
end 
+0

嗯,沒有運氣設置。我正在運行Rails 3.2.6 - 它現在說「無法找到* gem name *(> = 0),並列出了與Bundler一起安裝的所有寶石,但不是系統上的所有寶石,因爲安裝了寶石時我使用gem list進行了檢查,在最後一行更新了我的問題,附加了一些額外的信息,並且在Rakefile中添加了一個require。 –

1

,其中安裝在系統的寶石?

請務必將GEM_PATH env var設置爲該位置。

使用gem env gempath檢查設置是否正確。

如果不是,在~/.bashrc~/.bash_profile

export GEM_PATH='/path/to/system/gems' 
+0

這是基於每個項目的基礎上的,它對於沒有Gemfile的項目。這是一個Gemfile「特性」,你被限制在該項目的Gemfile中的gem文件中,我會試試這個,但是你所指的似乎是行不通的,我可以使用我的寶石其他地方。 –