2016-03-07 91 views
2

ruby​​ gem set存在一個基本問題,像rake xxxx這樣的命令可能會產生錯誤,因爲命令可能使用rake的全局版本,而gemfile需要非常特定的版本。使用RVM本地gemset和使用Bundle exec是否有區別?

我知道2種方法來緩解這種情況。

  1. 在rake和rails命令前面使用bundle exec。例如bundle exec rake db:migrate在前面添加此命令可以確保命令是以當前捆綁包的形式執行的,即當您運行bundle install時創建的捆綁包。

  2. 使用RVM。使用RVM創建本地gemset的方式比較少見。首先,在這種情況下,爲您的新應用創建目錄mkdir myappcd myapp,然後運行rvm use [email protected] --ruby-version --create創建沒有任何內容的本地寶石集。現在你可以運行gem install railsrails new .創建的myapp軌道與它的你在文件夾中的專用寶石環境。

由於不錯的額外RVM將每次CD自動MYAPP目錄時交換到正確的寶石。

至於據我所知這兩種方法的工作,但有沒有任何已知的問題,爲什麼你不會使用上述方法之一?

回答

1

如果你是像我這樣的RVM粉絲,那麼我會爲每個開始的rails項目創建自己的gemset。這將使我更容易使用rakerails命令,而不必每次指定bundle exec

請記住,當分享您的代碼時,一些開發人員可能會使用rbenv或者可能根本不使用ruby版本管理器。確保每個人都很開心並且使用相同版本的ruby的一種方法是在項目目錄中提供兩個額外的文件(.ruby-version.ruby-gemset)並在項目中跟蹤它們。

.ruby-version文件將包含您正在使用的ruby版本,例如2.4.1。請注意,這與RVM和rbenv兼容,並將切換到正確的ruby版本。

.ruby-gemset文件僅由RVM標識;從而切換到您爲項目設置的正確的寶石。

這會讓你的項目使用rbenv同時仍然使用RVM快樂:)

把所有這些因素加以考慮讓我們這些,現在你應該不在乎枯萎的人使用bundle exec或不兼容的開發!

1

不使用的一個原因(2):如果其他人想要使用您的代碼,他們將不得不爲自己複製所有內容,而不是僅記住鍵入bundle exec。他們可能以前從未見過(2),因此這可能不是微不足道的。