2010-12-20 67 views

回答

442

我相信你可以這樣做:

gem "foo", :path => "/path/to/foo" 
+8

硬編碼路徑適用於快速黑客會話,但bloudermilk的本地gem解決方案對版本控制下的項目更爲有效。它可以讓你繼續檢查兩個項目 - 使用寶石的寶石和項目 - 這樣其他人就不必檢查寶石來源或共享相同的路徑。 – mahemoff 2014-06-12 08:42:48

+3

通過在您的項目目錄中使用.gitignored符號鏈接到本地​​gem,您可以使其略微更清潔 - 這樣,您可以分別在兩個項目上使用源代碼控制,而其他人可以在不具有相同目錄結構的情況下執行相同操作。 – Dan 2015-05-27 08:01:04

+4

需要注意的可能是春天。如果您使用本地路徑作爲寶石,您可以注意到本地gem的緩存版本,就像我在rails控制檯中那樣。如果它看起來不像你當地的寶石變化正在接受嘗試'春天停止'看看它是否確實是問題。 – 2016-09-10 18:25:44

192

除了指定的路徑(如麥提到的),你也只能通過以下配置強制捆紮機使用本地寶石爲您的環境選項:

$ bundle config local.GEM_NAME /path/to/local/git/repository 

如果您正在開發兩個gem或一個gem和rails應用程序,這非常有用。

不過請注意,如果你已經使用Git爲你的依賴,比如這隻作品:

# In Gemfile 
gem 'rack', :github => 'rack/rack', :branch => 'master' 

# In your terminal 
$ bundle config local.rack ~/Work/git/rack 

由於看到the docs

+0

我遇到了問題,因爲我使用'BUNDLE_PATH'(構建一個分發包)。當你按照你的建議,或者Jimmy的回答時,它只會做'使用',而不是實際安裝到我的'BUNDLE_PATH'文件夾中。我無法弄清楚,有什麼幫助? – Automatico 2014-02-13 14:46:30

+2

注意這不適用於** gemspec **,每次討論[here](https://github.com/bundler/bundler/issues/2911)。 – dukedave 2014-07-10 18:27:36

+20

要禁用本地覆蓋:'bundle config --delete local.GEM_NAME' – alxndr 2014-11-29 21:56:32

25

如果您碰巧正在使用git,那麼您也可以使用git來引用本地gem。

gem 'foo', 
    :git => '/Path/to/local/git/repo', 
    :branch => 'my-feature-branch' 

然後,如果它改變了我跑

bundle exec gem uninstall foo 
bundle update foo 

但我不知道每個人都需要運行這兩個步驟。

+0

這很棒,但如果您正在積極開發寶石,那就不太方便了......因爲您需要承諾每一次更改&捆綁軟件卸載 &&捆綁安裝',爲您想要反映在您的應用程序上的每一個變化 – Ramses 2017-11-03 18:17:59

15

爲了利用當地的寶石倉庫在Rails項目,請按照下列步驟操作:

  1. 檢查你的寶石文件夾是一個Git倉庫(該命令在寶石文件夾執行)

    git rev-parse --is-inside-work-tree 
    
  2. 獲取庫路徑(命令在寶石文件夾執行)

    git rev-parse --show-toplevel 
    
  3. 的Rails應用程序

    bundle config local.GEM_NAME /path/to/local/git/repository 
    

    其中GEM_NAME是你的寶石和/path/to/local/git/repository的名義建立一個本地覆蓋是命令的點2

  4. 輸出在您的應用程序Gemfile添加以下行:

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master' 
    
  5. 運行bundle install應該給這樣的事情:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    

    其中GEM_NAME是你的寶石的名稱,從點2

  6. 最後/path/to/local/git/repository,運行bundle list,不gem list,你應該看到這樣的事情:

    GEM_NAME (0.0.1 5a68b88) 
    

    其中GEM_NAME是寶石名稱


一些重要的情況下,我使用觀察:

Rails 4.0.2 
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10 
RubyMine 6.0.3 
  • 看來RubyMine沒有顯示當地的寶石作爲外部庫。有關錯誤的更多信息,可以發現herehere
  • 當我改變當地的寶石什麼的,在Rails應用程序被加載順序我應該stop/start鐵軌服務器
  • 如果我改變的version該創業板,stopping/starting Rails服務器給我一個錯誤。爲了解決這個問題,我指定的Rails應用程序Gemfile寶石的版本是這樣的:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master' 
    
-2

如果你想在太科:

gem 'foo', path: "point/to/your/path", branch: "branch-name" 
0

您可以參考的寶石與源:source: 'https://source.com', git repository (:github => 'git/url')和本地路徑:path => '.../path/gem_name'
您可以在這篇文章中瞭解更多關於Gemfiles and how to use them的信息。

相關問題