2014-08-31 48 views
0

我想用ruby製作一個CLI工具。 我的工具需要捆綁一些庫(log4r,...)。所以當我切換我的ruby版本(2.0.0 - > 2.1.2)或者當切換gemset時,一些gem沒有安裝到新的ruby環境中時出現問題。 那麼我怎樣才能使我的應用程序像vagrant一樣工作,它可以在我使用的每個Ruby版本中工作?在rvm中切換ruby版本時Ruby命令行工具崩潰

+0

Vagrant是一個預先包裝的應用程序。它打包它的Ruby版本,它是寶石依賴和一切。 http://mitchellh.com/abandoning-rubygems – Joeyjoejoejr 2014-08-31 11:57:20

回答

0

如果您將應用程序打包爲Gem,那麼您可以包含描述應用程序的Gemspec。您可以指定的其中一項是its runtime dependencies;當用戶運行gem install myapp時,那麼gem命令將確保它包含您指定的所有內容(如log4r)。

沒有Rubygems就難以實現這一點。您可以將應用程序與定義的Ruby版本及其所有要求(that's what Vagrant does)一起打包,但這會使您的應用程序有更大的下載量,並且意味着您需要更多的維護。如果你想要在整個系統上安裝你的應用程序,並且它可以在每個Ruby環境中工作,那將是一件非常辛苦的工作。讓gem應用程序安裝您的應用程序(無論是系統範圍還是通過rbenv/rvm)並讓它爲您管理您的依賴關係要好得多。有default gems plugin for rbenvrvm gemsets來幫助管理這個。

+0

問題是因爲我從rbenv/rvm安裝ruby,我的應用程序僅在此版本的ruby和gemset(比如2.1.2,默認gemset)上可用。所有依賴項gem像log4r,thor ...安裝在/Users/guest/.rvm/gems/ruby-2.1.2。所以,如果我切換紅寶石版本,我的應用程序崩潰,因爲在新的紅寶石環境中,log4r和thor沒有安裝 – 2014-08-31 15:19:42

+0

是的 - 但如果你使用rbenv/rvm,那麼你的應用程序不應該*可用*如果你切換到沒有你的應用程序的環境。你可以在rbenv/rvm中使用默認的gemset,它可以幫助你在Ruby版本之間切換,而不必記得每次都安裝你的應用程序 - 我在原來的答案中添加了一些東西來反映這一點。 – 2014-08-31 15:28:40