2017-04-03 65 views
0

我是Ruby,Rails和寶石管理的新手。我注意到的一件事是,無論何時運行bundle install(即使在項目目錄中),它似乎都會安裝影響其他基於Gem的Rails項目的gem。解決寶石版本不兼容問題

例如,假設在一個基於gem的Rail項目(從gemfile安裝了一堆gem)中運行bundle install後,我遇到了gem不兼容問題。現在,這些問題將在所有其他基於創業板項目表現得並提出自己每次我試圖rackup

我的問題是:
1)是否有辦法本地化這種損傷(寶石版本不兼容)至目前的項目並沒有受到其他項目的影響?
2)有沒有一種獲得兼容寶石的好方法,或者是以寶石爲基礎查看寶石相關性的唯一方法(查看樹)並找出兼容的寶石?我似乎在這方面浪費了大量時間,如果我修復了其他問題似乎打破了。

請讓我知道我在這裏失蹤或指向我的資源。

感謝

+0

您使用的是rvm還是rbenv或類似軟件? –

+0

我在Ubuntu的VM上,並使用ruby2.3-dev和ruby-dev包來安裝ruby。我如何知道我是否使用rvm或rbenv? – linuxNoob

+0

你不是;你必須安裝它們。 –

回答

0

這聽起來像你缺少使用bundle exec

說明 此命令執行命令,使得在Gemfile中(5)可指定要求在Ruby程序的所有寶石。從本質上講,如果您通常運行類似rspec spec/my_spec.rb的東西,並且您想使用Gemfile(5)中指定的並通過bundle install(1)安裝的gems,則應該運行bundle exec rspec spec/my_spec.rb

bundle install將安裝的寶石,其通過任何應用使用相同的紅寶石共享,並且可以導致被安裝在同一寶石的多個版本$GEM_HOME(這是預期的和正常)。如果你還沒有使用bundle exec來加載你的Gemfile中指定的gem版本,你可能會遇到不兼容性錯誤或意外行爲,因爲ruby不知道需要哪個gem版本。


RVM,rbenv和其他紅寶石版本的經理是有用的工具,每個項目都隔離寶石(當使用也是其捆綁是不是真的有必要),並允許多個Ruby版本可以在同一臺機器上安裝(這不是由bundler處理的,並且在開發具有不同ruby版本要求的多個應用程序時可能非常有用)。

+0

有一件事可以在這裏添加混淆,那就是'rails'命令(我認爲是rails 3自動調用)會自動調用bundler,所以'rails server'等同於'bundle exec rails server'。這可能給人的印象是,在「bundle install」之後不需要使用其他bundle,直到開始使用其他gem包含的非rails可執行文件。 – Jonah

+0

我可能會被語言所困擾。對不起,英語不是我的第一語言。你說過 - 「如果你還沒有使用bundle exec只加載你的Gemfile中指定的gem版本,你可能會遇到不兼容性錯誤或意外行爲,因爲ruby不知道需要哪個gem版本。」那麼,是否期望在運行'bundle install'後運行'bundle exec'而不是'bundle install'或運行'bundle exec'?另外,在描述中可用的Ruby程序需要暗示'require'關鍵字? – linuxNoob

+0

'bundle install'安裝gem,然後'bundle exec'運行一個命令,只有你的Gemfile中列出的gem可以通過Ruby'require'關鍵字提供給'require'。 – Jonah

相關問題