Rails 3的“捆绑安装”速度超快(需要1秒),但之后没有Rails吗? (使用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/
。 这与将它们安装到系统路径的常规方法不同。 在系统路径上安装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
前缀命令。
就个人而言,我已经把这个别名化了,在一些命令之前两个字符是一个值得的权衡,以避免我认为的第七圈gem冲突地狱。
你的程序似乎是正确的(一定要使用新创建的gemset,通过rvm info
validation,如果它不说gemset:’proj’,请执行rvm ree@proj
),所以我会坚持下去并尝试建议。 顺便说一句,rails与bundler完美安装。
我一直在与奇怪的行为系统gem和本地gem斗争,因为有很多捆绑用户,包括Yehuda Katz,导致这个全面的postA 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在post中说它是在新的捆绑版本中修复的,但我几天前就遇到过这种情况(bundler 1.0.0)。 希望我带来更多的帮助而不是混乱到桌子上:)