2014-10-02 30 views
3

我有我的捆綁器被配置爲安裝到每個項目中.bundle/目錄的寶石。我該如何讓RVM尊重我的捆綁商的設置放置寶石的位置?

$ cat ~/.bundle/config 
--- 
BUNDLE_PATH: ".bundle" 
BUNDLE_BIN: ".bundle/bin" 

我怎樣才能使RVM尊重此設置,並沒有設置$GEM_HOME到另一個目錄(內~/.rvm/)每當我cd到我的項目?

到目前爲止,我有一個little script將設置$GEM_HOME(和$PATH$GEM_PATH)每當我cd在我的項目目錄,但它已停止工作,現在RVM基本上每當我手動取消設置的Ruby版本RVM的最新版本更改$GEM_HOME,我不知道如何使其重新工作。

+0

將gem安裝到.bundle並從bin /文件夾運行可執行文件的問題是什麼?例如,我可以使用'bundle exec bin/exec'運行一個可執行文件。 – 2014-10-05 15:33:57

+0

問題是RVM將'$ GEM_HOME'設置爲'〜/ .rvm /'中的某些內容,所以我不能執行像'gem cleanup'或'寶石安裝',因爲寶石是在不同的地方。 – 2014-10-06 08:26:22

+0

你可以通過bundler本身運行gem,所以:'bundle exec gem ...',所以即使添加一個別名'alias gem = bundle exec gem'或者獲取一個函數來檢查bundle是否控制了gem/project文件夾,對選定的情況運行'gem'或'bundle exec gem'。 – 2014-10-06 21:05:09

回答

3

首先應指定要使用非常不同的寶石爲您的項目中(考慮它的名字是myproject42):

$ cd myproject42 && rvm --rvmrc --create use [email protected] --ignore-gemsets 

rvmrc功能可以將您的文件夾中創建配置文件。你已經與宇宙分離了一半。現在,要修改這個文件了一下,設置任何你想要的:

... 
unset __hook 

# my exports 
export GEM_PATH=`pwd` 
export GEM_HOME=`pwd` 
... 

cd註銷,然後重新進入該目錄。這將導致警告:(。在這種情況下/tmp/myproject42

You are using '.rvmrc', it requires trusting, it is slower and ... 
[LINES SKIPPED] 
************************ 
y[es], n[o], v[iew], c[ancel]> y 
Using: /tmp/myproject42 

一旦你確認你知道這個修改,將寶石設置爲你想要的東西你可以驗證:

$ rvm gemset dir 
Warning! PATH is not properly set up, '/tmp/myproject42/bin' is not available, 
[LINES SKIPPED] 
/tmp/myproject42 

您可能想要進行一些清理,例如抑制這些警告。在這些警告中打印出「howtos」,它們非常直觀,所以我將初始過程的描述保留爲「髒」,以準確顯示它如何在您的機器上運行。

我希望這會有所幫助。

+0

我還沒有嘗試過,但即使它可以工作,爲建立每個新項目也需要進行過多的手動工作(即,此解決方案過於繁瑣,而且無法擴展)。 – 2014-10-06 20:13:09

+0

'echo'export GEM_PATH = .bundler'> .rvmrc'可以做到這一點,如果你正在尋找黑客,就像你以前的'zsh'解決方案。我描述瞭如何使用'rvm'完成這個過程。 – mudasobwa 2014-10-06 20:24:09

+0

mudasobwa提供了您要求的答案。如果工作量太大,則編寫腳本或修改RVM。儘管如此,這是一個很好的,翔實的答案。這也是一個很好的問題。 Upvotes爲:) – 2014-10-09 03:45:58