如何在Windows上拥有多个版本的Ruby AND Rails及其组合?

nop*_*ole 29 ruby ruby-on-rails rvm

由于Windows不支持rvm(Ruby版本管理器),我们如何拥有

  • Ruby 1.8.7,Rails 2.3.8
  • Ruby 1.8.7,Rails 3.0.0
  • Ruby 1.9.2,Rails 3.0.0

在同一台电脑上?可以使用虚拟机,但它有点麻烦.

Har*_*tty 58

使用uru.它是一个多平台的ruby环境管理器.您可以在此处下载Windows版本:https://bitbucket.org/jonforums/uru/wiki/Downloads

安装该工具

假设C:\tools是在PATH上uru_rt.exe并被提取到C:\tools

C:\tools>uru_rt admin install
Run Code Online (Sandbox Code Playgroud)

这会将uru.bat文件添加到tools目录中.

注册ruby

uru admin add C:\ruby200\bin
Run Code Online (Sandbox Code Playgroud)

列出可用的红宝石

uru ls
174         : jruby 1.7.4 (1.9.3p392) 2013-05-16 2390d3b on Java HotSpot(TM)
200p255     : ruby 2.0.0p255 (2013-07-07 revision 41812) [i686-linux]
=> system   : ruby 2.1.0dev (2013-07-06 trunk 41808) [i686-linux]
Run Code Online (Sandbox Code Playgroud)

切换红宝石版

uru 174
---> Now using jruby 1.7.4 tagged as `174`
Run Code Online (Sandbox Code Playgroud)

可在此处找到更多命令:https://bitbucket.org/jonforums/uru/wiki/Examples


老答案

我使用Pik在Windows机器上管理多个版本的ruby.

安装pik gem

> gem install pik
Successfully installed pik-0.2.6
1 gem installed
Run Code Online (Sandbox Code Playgroud)

将pik安装到路径中的位置,但是除了ruby\bin目录之外的某个位置.

>echo %path%
PATH=c:\pik;c:\ruby\Ruby187\bin;

>pik_install C:\pik
Thank you for using pik.

Installing to C:\pik
pik is installed
Run Code Online (Sandbox Code Playgroud)

使用RubyInstaller安装Rubt 1.9.2并将新的Ruby版本添加到pik注册表中.

>pik add C:\Ruby192\bin
Run Code Online (Sandbox Code Playgroud)

列出可用的Ruby版本:

>pik list
187: ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32] *
192: ruby 1.9.2p0 (2010-08-18) [i386-mingw32]
Run Code Online (Sandbox Code Playgroud)

要切换到Ruby 1.9.2:

>pik 192
>pik list
187: ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32]
192: ruby 1.9.2p0 (2010-08-18) [i386-mingw32] *
Run Code Online (Sandbox Code Playgroud)

要在不同版本的Rails之间切换:

在Rails 2.x中,在config/environment.rb文件中设置RAILS_GEM_VERSION :

RAILS_GEM_VERSION = '= 2.3.8' unless defined? RAILS_GEM_VERSION
Run Code Online (Sandbox Code Playgroud)

在rails 3中,使用Gemfile指定Rails版本:

gem "rails", "3.0.0"
Run Code Online (Sandbox Code Playgroud)

  • 2014年pik现已过时,没有用处 (4认同)
  • @HarishShetty - Pik走了.你能否在你的答案中添加Uru? (2认同)
  • @sidsmith,`pik`在[commit]中退休了(https://github.com/vertiginous/pik/commit/13e5cc2d0a78d821e7c5d4255e86f6a9ca7f24fc).直到今天我才看到这个消息.感谢您的通知,我很高兴有一个'pik`的替代品. (2认同)

Ste*_*ler 5

我给自己写了一个批处理文件,该文件在NTFS上创建了一个结(也称为符号链接)。这个想法是保持PATH不变。该路径始终包含c:\devkit\bin;c:\ruby\bin;...。以下批处理文件将链接更改为实际目录。

@echo off
echo 1 - Ruby 1.9.3
echo 2 - Ruby 2.0.0 (32 bit)
echo 3 - Ruby 2.0.0 (64 bit)
choice /C 123 /M "Which Ruby? "

if errorlevel 255 goto confused
if errorlevel 3 goto 3
if errorlevel 2 goto 2
if errorlevel 1 goto 1
if errorlevel 0 goto 0
goto confused

:1
if exist c:\ruby rmdir c:\ruby
if exist c:\devkit rmdir c:\devkit
mklink /j c:\ruby c:\ruby193
mklink /j c:\devkit c:\devkit-4.5.2
goto end

:2
if exist c:\ruby rmdir c:\ruby
if exist c:\devkit rmdir c:\devkit
mklink /j c:\ruby c:\ruby2-x86
mklink /j c:\devkit c:\devkit-x64
goto end

:3
if exist c:\ruby rmdir c:\ruby
if exist c:\devkit rmdir c:\devkit
mklink /j c:\ruby c:\ruby2-x64
mklink /j c:\devkit c:\devkit-x64
goto end

:confused
echo I'm confused ...

:end
ruby -v
Run Code Online (Sandbox Code Playgroud)