代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

Rails3的“bundle安装”非常快(需要1秒),但是之后就没有Rails了?(使用rvm)

  •  5
  • nonopolarity  · 技术社区  · 14 年前

    我正在使用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
    

    所以那个项目的文件说:

    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
    

    所以 捆绑安装 不把轨道当作宝石来安装吗? script/rails -v 显示为3.0.0

    2 回复  |  直到 14 年前
        1
  •  12
  •   Ryan Bigg Andrés Bonilla    14 年前

    这是正确的。 bundle install 不会像传统意义上的宝石一样安装Rails。现在来解释原因。

    当Bundler运行安装时,它将安装gems a目录: ~/.bundle/<type-of-ruby>/<version>/gems 因为你只能有一个可执行文件 每颗宝石 . 你已经安装了SomeGem v2,但是想使用SomeGem v1的生成器吗?太糟糕了。

    Bundler通过将它们安装到上述位置并只需要它所需的gems的特定版本(在中指定)来解决这个问题 Gemfile . 通过简单的跑步 rails ,你在试着运行 可执行文件 gem install rails )而不是捆绑机(通过 捆绑安装 对于Rails项目)。

    要运行Bundler安装的程序,您必须像这样运行它 bundle exec rails 在包含 指定Rails的任何版本的。Bundler将加载特定版本的Rails,您现在应该能够并行运行它们,唯一的折衷办法是 bundle exec 命令的前缀。

    就我个人而言,我把它化名为 be 在我看来,在某些命令前加两个字符是避免第七轮宝石冲突地狱的一个值得权衡的选择。

        2
  •  0
  •   oma    14 年前

    您的过程似乎是正确的(请确保也使用新创建的gemset,通过 rvm info ,做 rvm ree@proj 如果它没有说gemest:'proj',那么我会伸出头来尝试一个建议。顺便说一句,rails与bundler完美结合。

    我一直在与wierd行为系统gems和本地gems斗争,因为有很多bundler用户,包括Yehuda Katz,导致了这篇全面的文章 A Tale of Abort Traps

    简而言之,如果您运行bundle install 之前 您有bundler gem(获取“标准”gem not found错误),然后执行 ,然后是另一个bundler安装,bundler gem已经安装到您的 系统,而不是rvm .

    解决方案