[英]Rails 3's “bundle install” is super fast (takes 1 second), but no Rails is there afterwards? (using rvm)
我正在使用rvm,執行以下操作:
rvm install ree <--- (Ruby Enterprise Edition), or this can be 1.8.7 or 1.9.2
rvm ree
rvm gemset create 'proj'
cd path/to/proj
bundle install
所以該項目中的Gemfile說:
gem 'rails', '3.0.0'
和bundle install
超快,報告
Using rails (3.0.0)
但在那之后我打字
$ rails -v
/Library/Ruby/Site/1.8/rubygems.rb:779:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError)
from /Library/Ruby/Site/1.8/rubygems.rb:214:in `activate'
from /Library/Ruby/Site/1.8/rubygems.rb:1082:in `gem'
from /usr/bin/rails:18
$ which rails
/usr/bin/rails
所以bundle install
不會將rails作為gem安裝? 但如果我輸入script/rails -v
則表明它是3.0.0
這是對的。 bundle install
不會像傳統意義上那樣將Rails安裝為gem。 現在解釋原因。
當Bundler運行安裝時,它會在gems中安裝一個目錄: ~/.bundle/<type-of-ruby>/<version>/gems
。 這與將它們安裝到系統路徑的常規方法不同。 在系統路徑上安裝gem時,可執行文件可用,因為該目錄位於加載路徑中。 現在這是一件壞事 ,因為每個gem只能有一個可執行文件。 您是否安裝了SomeGem v2但是想使用SomeGem v1中的生成器? 太糟糕了。
Bundler通過將它們安裝到上述位置並且只需要特定版本的Gemfile
來解決這個問題(在Gemfile
指定。通過簡單地運行rails
,你試圖運行系統可執行文件(如在gem install rails
)而不是Bundler(通過為Rails項目進行bundle install
提供)。
要運行Bundler安裝的那個,你必須在包含指定任何版本的Rails的Gemfile
的目錄中運行它,就像這個bundle exec rails
一樣。 Bundler將加載特定版本的Rails,你現在應該可以並排運行它們,唯一的權衡是bundle exec
前綴命令。
就個人而言,我別名這be
和之前的一些命令兩個字符是一個值得權衡避免在我看來寶石沖突地獄的第七圈。
你的程序似乎是正確的(一定要使用新創建的gemset,請通過rvm info
驗證,如果它不說gemset:'proj',請執行rvm ree@proj
),所以我會堅持下去並嘗試一個建議。 順便說一句,rails與bundler完美安裝。
我一直在與奇怪的行為系統寶石與本地寶石作斗爭,因為有很多捆綁用戶,包括Yehuda Katz,導致這個全面的帖子A Tale of Abort Traps
簡而言之,如果你在擁有bundler gem 之前運行bundle install(獲得“標准”gem not found錯誤),那么執行gem install bundler ,然后再進行另一個bundle install,bundler gem已安裝到你的系統,而不是rvm 。
解決方案 :刪除.bundle,(並執行gem uninstall bundler?)。 然后我會在捆綁安裝之前打開一個新術語,做rvm ree @ proj和gem install bundler。
Yehuda在帖子中說它已在新的捆綁版本中修復,但我幾天前就遇到過這種情況(bundler 1.0.0)。 希望我帶來更多的幫助而不是混亂到桌子上:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.