2012-09-03 48 views
2

我一直在尋找用rbenv替換RVM,因爲我正在使用bundle來管理我的gemfiles。我相信,rbenv在管理我的Ruby版本方面輕了很多,所以我卸載了RVM並安裝了rbenv。我使用使用rbenv替換RVM --mkmf錯誤

gem install bundler 

因爲我們需要它到處都安裝了捆綁軟件gem。然後我打開了一個項目,並使用rbenv安裝所需版本的Ruby:

rbenv install 1.9.3-p194 
rbenv local 1.9.3-p194 
rbenv rehash 

我進入ruby -v,以確保它是使用Ruby版本是正確的,它是,所以我試圖運行包和它跑,直到它試圖安裝RedCloth和再失敗:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. 

    /usr/bin/ruby1.9.1 extconf.rb --with-cflags=-w 
    /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError) 
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from extconf.rb:1:in `<main>' 

,提示我綁定前安裝RedCoth,所以我安裝RedCloth:

gem install RedCloth 

WH ich成功了。然後我跑ruby -v,只是爲了確保它仍然是正確的,那麼試圖運行bundle update和同樣的錯誤發生:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. 

    /usr/bin/ruby1.9.1 extconf.rb --with-cflags=-w 
    /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError) 
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from extconf.rb:1:in `<main>' 

    Gem files will remain installed in /home/ruberto/.bundler/tmp/7551/gems/RedCloth-4.2.9 for inspection. 
    Results logged to /home/ruberto/.bundler/tmp/7551/gems/RedCloth-4.2.9/ext/redcloth_scan/gem_make.out 
    An error occurred while installing RedCloth (4.2.9), and Bundler cannot continue. 
    Make sure that `gem install RedCloth -v '4.2.9'` succeeds before bundling. 

然後我嘗試安裝不同版本的Ruby,但沒有成功有兩種。

有沒有人有想法?

我後來嘗試在我的其他項目中做同樣的事情,它似乎工作得很好。我有一個使用1.8.7的版本,就像將rbenv設置爲正確的版本,然後運行捆綁包一樣簡單。我嘗試了幾乎所有Ruby版本的組合,但它不起作用。

回答

0

我終於克服了這個問題。

我安裝了錯誤版本的Ruby 1.8.7-p370。然後我運行了bundle,並且有一些gem編譯針對Ruby 1.8.7的原生擴展,當時這個bundle是1.9.3包,所以即使我要切換到1.9.3版本並再次運行bundle,它也會炸出來。

爲了解決這個問題,我只是刪除所有的寶石,然後安裝正確的版本的Ruby,然後重新運行捆綁。

+0

而不是刪除並重新安裝寶石,你可以使用'gem pristine --all',這通常可以解決更新Ruby版本時編譯問題的問題。然而,rbenv的工作方式應該爲安裝的每個Ruby版本安裝不同的gem安裝,在安裝Ruby之後應該通過'bundle install'修復。 –

0

我有類似的問題。事實證明,即使我的路徑前面有〜/ .rbenv/shims目錄,zsh也會將bundle的位置緩存到/ usr/local/bin/bundle。

解決方案只是在shell中運行rehash(不是rbenv rehash)。這刷新了所有緩存的命令,包括捆綁包,並且在此之後一切順利。