2012-08-25 61 views
2

我以爲我明白Bundler是如何處理寶石的,但在最近發生的事情之後,我不確定我是否正確。不瞭解Bundler與寶石的互動

我正在開發一個Rails應用程序。首先(我只是想熟悉Rails環境,我之前沒有用過),但是我沒有使用IDE。但是,因爲我錯過了IDE的一些優點,所以我剛開始使用RubyMine。作爲RubyMine設置的一部分,它要求更新我現有項目的所有寶石。

之後,我無法運行「rake [任何]」。每次我這樣做,我收到了一個錯誤:

您已經激活了耙0.9.3.beta.1,但你的Gemfile 需要耙0.9.2.2。使用bundle exec可以解決這個問題。

我可以更新到下一個版本的耙 - 這不是問題 - 但我不明白髮生了什麼事。發生了什麼,我「激活」了耙子的新版本。最終,我最終通過把

gem 'rake', '0.9.3.beta.1' 

在我的Gemfile和運行

bundle update rake 

解決這個問題,但是,我仍然不知道這裏發生了什麼。如果我以前使用9.2.2,爲什麼這樣突然爆炸,我怎麼能在將來防止這種情況呢?

+0

您使用的是rvm還是rbenv? – deefour

+0

@Deefour - 都不是。 – JasCav

回答

0

你真的應該考慮安裝和使用RVMRbenv來管理你的Ruby版本和gemsets。如果您使用Rbenv方式,則可以使用插件來管理與RVM原生方式相似的gemsets。

您已經激活了rake 0.9.3.beta.1,但是您的Gemfile需要rake 0.9.2.2。使用bundle exec可以解決這個問題。

你的最後一個bundle執行和安裝之間的一些點/配置/運行的RubyMine您必須已經安裝rake 0.9.3.beta.1。由於您不是通過像RVM或Rbenv那樣的寶石管理您的寶石,因此Rake的默認版本變爲0.9.3.beta.1,而不是捆綁器安裝的版本0.9.2.2

上述錯誤提示您Gemfile有這樣的事情

gem 'rake', '0.9.2.2' 

不允許使用耙的版本是什麼,但0.9.2.2

如果你做實際上除了0.9.3.beta.1和你Gemfile0.9.2.2您的系統配置爲0.9.2.2,而不是運行

rake some:task 

可以運行

bundle exec rake some:task 

和打捆會通過0.9.2.2版本的耙子運行some:task。無論使用RVM還是Rbenv,通過與bundle exec ...捆綁器在Gemfile中找到的與gems相關的任務都被認爲是良好實踐。

你可以閱讀約bundle exechere

+0

我會研究RVM。但是......詢問你的回答......我想我的Gemfile中有這樣的一行 - 但事實並非如此。這讓我感到困惑。 (但是...我的Gemfile.lock在它裏面有= 0.9.2.2 - 我只是不知道那是怎麼回事。) – JasCav

+0

如果它在'Gemfile.lock'中,並且沒有顯式地設置在你的'Gemfile'中,它被指定爲你的'Gemfile'中**是**的許多寶石之一的依賴。 – deefour

4

如果您使用的是Rubymine,則應將其配置爲使用bundle exec運行rake任務。

轉到: 運行 - >編輯配置 - >默認設置 - >耙 - >捆紮機標籤並選中 「在捆綁的上下文中運行腳本(束EXEC)」

刪除所有任務已經創建並且下一次再次創建它們時將應用默認值。您也可以單獨配置每個創建的任務。