[关闭]
@qidiandasheng 2021-04-22T22:50:16.000000Z 字数 1950 阅读 1138

Ruby的rvm&gem的差别(😁)

Python&Ruby


Ruby

Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言。

mac自带了ruby的运行环境,默认安装目录在:

  1. ~ which ruby
  2. /usr/bin/ruby

截屏2020-11-22 下午1.39.23.png-124.6kB

RVM

RVM是一個管理 Ruby 版本的工具。有了系统自带的ruby,我们可以使用,但是有时候我们可能想使用不同的版本,去修改系统版本很可能造成一些问题。

  1. # 安装 rvm,不能翻墙请指定ruby源
  2. curl -sSL https://get.rvm.io | bash -s stable
  3. # 安装指定版本的ruby 2.5.1
  4. rvm install 2.5.1
  5. # 指定ruby默认版本
  6. rvm use 2.5.1 --default

然后我们再看一下对应版本的ruby运行环境的安装目录:

  1. ~ which ruby
  2. /Users/dasheng/.rvm/rubies/ruby-2.5.1/bin/ruby

运作方式可以将其分为三个部分:①:Ruby 版本、②:Gemset 环境、③:Gem。
安裝的 Ruby 版本可以对应到设定的 Gemset,而 Gemset 又指向很多的 Gem:

1_rB5JwqBls5G5qF7zQ3rOIQ.png-61kB

gemset

RVM 不仅可以提供一个多 Ruby 版本共存的环境,还可以根据项目管理不同的 gemset.

gemset 可以理解为是一个独立的虚拟 Gem 环境,每一个 gemset 都是相互独立的。里面安装的gem都是不同的。

gemset 是附加在 Ruby 语言版本下面的,例如你用了 2.2.4, 建立了一个叫 rails3 的 gemset。当切换到 2.5.1 的时候,rails3 这个 gemset 并不存在。

gemset常用操作

  1. #建立gemset
  2. rvm use 2.5.1
  3. rvm gemset create rails3
  4. #切换版本和版本对应的gemset
  5. rvm use 2.5.1
  6. rvm use 2.5.1@rails3
  7. #设置系统默认的gemset(设置global的时候最好先rvm gemset create global)
  8. rvm 2.5.1@rails3 --default
  9. #列出当前的gemset
  10. rvm gemset list
  11. #删除一个 gemset
  12. rvm gemset delete rails3
  13. #安装gem到指定的gemset
  14. rvm @global do gem install rake

gem

在 Ruby 当中,有许多用 Ruby 写成的套件可以直接使用。而我们为了使用这些套件,经常会使用到这个服务。

RubyGems 提供了 ruby 社群的 gem 的托管服务用于 ruby 软件包的下载、安裝,而我們安裝下來的东西就称为 Gem。

常用操作

  1. 查看:gem sources -l
  2. 添加:gem sources -a url地址
  3. 更新:gem sources -u
  4. 删除:gem sources -r url地址
  5. gem版本:gem -v
  6. 更新所有包:gem update
  7. 更新RubyGems软件 gem update --system
  8. 安装rake,从本地或远程服务器:gem install rake
  9. 安装rake,从远程服务器:gem install rake --remote
  10. 安装到指定的gemsetrvm @global do gem install rake
  11. 指定安装版本的:gem install rake -v(或者--version) 1.6.2
  12. 卸载rake包:gem uninstall rake
  13. 清除所有包旧版本,保留最新版本:gem cleanup
  14. 查看gem的环境:gem environment

问题

gem可执行文件目录不同

下面pod和chaos的目录是在rubies下面,one的目录是在gems下面:

  1. ~ which pod
  2. /Users/dasheng/.rvm/rubies/ruby-2.5.1/bin/pod
  3. ~ which chaos
  4. /Users/dasheng/.rvm/rubies/ruby-2.5.1/bin/chaos
  5. ~ which one
  6. /Users/dasheng/.rvm/gems/ruby-2.5.1/bin/one

导致执行以下代码时报错:

  1. one_path = `which one`
  2. lib = File.expand_path('../../lib', one_path)
  3. $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
  4. require 'onetool/onepods/onepods'
  1. [!] Invalid `Podfile` file: cannot load such file -- onetool/onepods/onepods.

当切换rvmsetglobal后正常:

  1. ~ rvm use 2.5.1@global --default
  2. ~ which one
  3. /Users/dasheng/.rvm/rubies/ruby-2.5.1/bin/one
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注