【问题标题】:Change rails version used by rvm更改 rvm 使用的 rails 版本
【发布时间】:2013-08-17 14:54:35
【问题描述】:

这是我的本地宝石:

$ gem list

*** LOCAL GEMS ***

actionmailer (4.0.0, 3.2.14)
actionpack (4.0.0, 3.2.14)
activemodel (4.0.0, 3.2.14)
activerecord (4.0.0, 3.2.14)
activerecord-deprecated_finders (1.0.3)
activeresource (3.2.14)
activesupport (4.0.0, 3.2.14)
arel (4.0.0, 3.0.2)
atomic (1.1.13)
builder (3.1.4, 3.0.4)
bundler (1.3.5)
bundler-unload (1.0.1)
erubis (2.7.0)
hike (1.2.3)
i18n (0.6.5)
journey (1.0.4)
json (1.8.0)
mail (2.5.4)
mime-types (1.24)
minitest (4.7.5)
multi_json (1.7.9)
polyglot (0.3.3)
rack (1.5.2, 1.4.5)
rack-cache (1.2)
rack-ssl (1.3.3)
rack-test (0.6.2)
rails (3.2.14)
railties (4.0.0, 3.2.14)
rake (10.1.0)
rdoc (3.12.2)
rubygems-bundler (1.2.2)
rubygems-update (2.0.7)
rvm (1.11.3.8)
sprockets (2.10.0, 2.2.2)
sprockets-rails (2.0.0)
thor (0.18.1)
thread_safe (0.1.2)
tilt (1.4.1)
treetop (1.4.15)
tzinfo (0.3.37)

但是当我输入 rails -v 时,我得到了这个:

 $ rails -v
Rails 4.0.0
 $ which rails
/Users/polonium/.rvm/rubies/ruby-2.0.0-p247/bin/rails

如何指定 rvm 以使用 rails 3.2.14 版本?

提前致谢

【问题讨论】:

    标签: ruby-on-rails ruby rvm


    【解决方案1】:

    您可以使用特定的 rails 版本创建一个新的 rails 应用程序,如下所示:

    rails _3.2.14_ new myApp
    

    【讨论】:

    • 哦,是的!那是完美的。谢谢。
    • 这是创建具有特定 rails 版本的 rails 应用程序的修复程序,但不是 rvm 原始问题的修复程序。@mpapis 答案完全指向原始问题。
    • 这对我不起作用:$ rails _3.2.14_ new myApp /Users/7stud/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/dependency.rb:296:in 'to_specs': Could not find 'railties' (= 3.2.14) - did find: [railties-4.0.0] (Gem::LoadError)
    【解决方案2】:

    如何指定 rvm 以使用 rails 3.2.14 版本?

    rvm 与 rails 无关。 rvm 用于管理多个 ruby​​ 安装。您的每个 ruby​​ 安装都可以与多个 gemset 相关联。例如,假设您安装了 ruby​​ 1.9.3,并为 ruby​​ 1.9.3 创建了两个 gemset:gemsetA 和 gemsetB。如果您告诉 rvm 将 ruby​​ 1.9.3 与 gemsetA 一起使用,则意味着:

    1. 您的 ruby​​ 程序将由 ruby​​ 1.9.3 执行。

    2. 您的 ruby​​ 程序可能需要 gemsetA 中的任何 gem(然后允许您的程序使用 gemsetA 中定义的方法(或类)),但您的 ruby​​ 程序无法看到 gemsetB 中的任何 gem。

    这是一个具体的例子:

    ~$ rvm list
    
    rvm rubies
    
       ruby-1.8.7-p370 [ i686 ]
     * ruby-1.9.3-p194 [ x86_64 ]
    => ruby-2.0.0-p0 [ x86_64 ]
       ruby-2.0.0-p247 [ x86_64 ]
    
    # => - current
    # =* - current && default
    #  * - default
    
    
    ~$ rvm use 1.9.3-p194
    Using /Users/7stud/.rvm/gems/ruby-1.9.3-p194
    

    ~$ rvm gemset list   (This lists only the gemsets for the current ruby version)
    
    gemsets for ruby-1.9.3-p194 (found in /Users/7stud/.rvm/gems/ruby-1.9.3-p194)
    => (default)
       global
       programming
       rails3tutorial
       rails4
    
    ~$ rvm gemset use programming
    Using ruby-1.9.3-p194 with gemset programming
    

    完成此操作后,我的 ruby​​ 程序将由 ruby​​ 1.9.3 执行,并且编程 gemset 中的任何 gem 都可以要求到我的 ruby​​ 程序中。您可以使用快捷方式一步执行这两个命令:

    rvm use ruby 1.9.3-p194@programming
    

    您只需将 ruby​​ 版本和 gemset 与它们之间的“@”结合起来。

    但是当我输入 rails -v 时,我得到了这个:

    $ rails -v
    Rails 4.0.0
    

    这是因为当前 gemset 包含 rails 4.0.0 的 gem。如果您想看到$ rails -v 输出Rails 3.2.14,那么您需要告诉rvm 切换到包含rails 3.2.14 gem 的gemset。

    但是,您可以让 rvm 自动切换到适合您的 rails 项目的 rails 版本和 gemset。在您的 Gemfile 中,在 ruby​​ 版本之后添加注释:

    ruby '2.0.0'
    #ruby-gemset=railstutorial4_gems
    

    然后,当您切换到包含您的 rails 项目的目录时,rvm 会自动将当前的 ruby​​ 切换到 ruby​​ 2.0.0,并将当前的 gemset 切换到 railstutorial4_gems。如果您从 Rails 应用程序中更改目录,rvm 会将当前的 ruby​​ 和当前的 gemset 改回原来的样子。

    我只是一个 Rails 初学者,但这里是我用来创建新项目的步骤,这些步骤直接来自 railstutorial 书 (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book)

    1)

    .../rails_projects$ rvm use <ruby version here>@<new gemset name here> --create 
    
    e.g.
    
    .../rails_projects$ rvm use ruby-1.9.3-p194@myapp_gemset --create
    

    2)

    .../rails_projects$ gem install rails --version 3.2.14
    

    因为当前 gemset 是 myapp gemset,所以该命令会将 rails 3.2.14 gem 安装到 myapp gemset 中。

    3)

    .../rails_projects$ rails new myapp
    .../rails_projects$ cd myapp
    

    当前 gemset 仍然是 myapp_gemset。

    4)

    .../rails_projects/myapp$ rails -v
    Rails 3.2.14
    

    如果有人想知道以下两个宝石到底是什么意思:

    gemsets for ruby-1.9.3-p194 (found in /Users/7stud/.rvm/gems/ruby-1.9.3-p194)
    
    => (default)
       global
    

    rvm 为您安装的每个 ruby​​ 版本创建这两个 gemset。安装 ruby​​ 版本后,如果您没有自己为该 ruby​​ 版本创建 gemset,并且您安装了 gem,那么 gem 将进入(默认)gemset。而且,如果您希望所有 gemset 都包含某个 gem,您可以切换到全局 gemset 并在那里安装 gem。

    更新: -------

    为了保持与其他 ruby​​ 版本管理器的兼容性,您可以在不同的文件而不是 Gemfile 中为您的项目指定 ruby​​ 版本和 gemset 名称:

    $ cd ~/rails_projects/myapp
    
    ~/rails_projects/myapp$ echo 2.0.0 > .ruby-version
    ~/rails_projects/myapp$ echo myapp_gemset > .ruby-gemset
    

    当您cd 进入项目目录时,您仍然会获得相同的自动 ruby​​ 版本和 gemset 切换。请参阅 rvm 文档here

    【讨论】:

    • 这是一个写得很好的答案。特别是关于“在你的 Gemfile 中,在 Ruby 版本之后添加注释”的部分。我不知道 rvm 会在版本之间自动切换。
    • StackOverflow 原石中的稀有无瑕钻石。谢谢7stud。谢谢。
    【解决方案3】:

    在正确使用 rvm 时,您找到的路径 /Users/polonium/.rvm/rubies/ruby-2.0.0-p247/bin/rails 不是您在标准 rvm 安装中找到的正确路径,您将看到的应该是:/Users/polonium/.rvm/gems/ruby-2.0.0-p247/bin/rails

    要让它正常工作,试试这个流程:

    rvm use 2.0.0
    rvm gemset empty
    rvm use @rails3 --create 
    gem install rails -v "~>3.2"
    rvm use @rails4 --create
    gem install rails -v "~>4"
    

    现在您可以通过以下方式在这两个导轨安装之间切换:

    rvm use 2.0.0@rails3
    rails -v             # rails 3.2...
    rvm use 2.0.0@rails4
    rails -v             # rails 4.0...
    

    【讨论】:

    • 如果 gemset 尚不存在,请执行以下操作: rvm use @rails3 --create
    【解决方案4】:

    你应该这样做:gem install 'rails' -v '3.2.13'

    你应该使用干净的 gemset,如果你使用的是 rvm,你可以试试:

    rvm gemset 创建 rvm gemset 使用

    现在你有了一个干净的 gemset,是时候安装 rails 了,

    gem install rails -v '3.2.13'

    然后创建一个rails应用,

    rails 新的应用程序名称

    【讨论】:

      【解决方案5】:

      "railties(4.0.0,"是你的问题。估计是安装错了吧?

      使用 gem 卸载 railties 卸载该版本,然后选择 4.0.0 选项。

      现在命令“rails -v”将返回您预期的版本,即“3.2.14”

      【讨论】:

        【解决方案6】:

        首先确保您使用的是您打算使用的 ruby​​ 版本,以确保检查全局 gemset

        $ruby -v
        

        然后切换到全局 gemset(全局 gemset 适用于所有 gemset,因此请确保它保持干净和通用...或全局,因此得名)

        $rvm gemset use global
        

        然后检查宝石列表中可能影响它的宝石,例如 Harsha 通过键入提到的“railties”宝石

        $gem list
        

        有时全局 gemset 可能会被一个意外的 gem 填充,这会影响所有其他 gemset。如果你发现一个放错地方的 gem,你可以简单地用

        卸载它
        $gem uninstall examplegem 
        

        或者对于该 gem 的特定版本,在 -v 中使用引号中的版本

        $gem uninstall examplegem -v"3.2.1"
        

        并阅读 7stud 关于创建和使用 RVM 以在不同 gemset 之间进行更改的评论。

        【讨论】:

          【解决方案7】:

          你可以添加你想要的 Rails 版本,使用:

          $ gem install rails --version 3.2.14
          

          然后使用该版本创建一个应用程序:

          $ rails _3.2.14_ new myapp
          

          最后,你可以查看“Gemfile”的内容来佐证:

          ...
           gem 'rails', '3.2.14'
          ...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-05
            • 2012-01-29
            • 2014-07-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-11
            相关资源
            最近更新 更多