Ruby环境搭建asdf+ruby+gem+bundler+源替换

cg_dev0002.jpg
我的博客 https://mark24code.github.io/ruby/2021/12/24/Ruby%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BAasdf+ruby+gem+bundler+%E6%BA%90%E6%9B%BF%E6%8D%A2.html

适用于新手搭建Ruby环境

step1 asdf

asdf 的功能类似 rvm, 但是更高级点,严格意义上说 asdf 继承了所有语言的 *vm 管理。我喜欢一劳永逸。

开始吧

详细可以访问官网 https://asdf-vm.com

我下面列举我要做做的事情,大家根据自己的实际情况来。

1.1 安装 asdf

安装就是 clone

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.1

1.2 启用 asdf

把下句添加到你的 .zshrc

. $HOME/.asdf/asdf.sh

bash同理,其他的 shell参考 asdf 官网

step2 (通过asdf)安装 Ruby

这种形式安装的Ruby不需要Root权限,且可以安装多个版本每个版本彼此隔离,非常爽。

详细可以参考 asdf-ruby plugin

基本逻辑是 asdf 是管理 vm的框架,我们要在基础上安装 asdf-ruby 插件,然后通过 这个插件安装我们想要的ruby。

下面我只列举用到的

安装插件

asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git

2.1 安装必要的依赖

编译式安装,所以你可以自由的安装在你的 Mac、树莓派、X86, 系统上 Arch、Debian、CentOS、FreeBSD……

ruby-build/wiki#suggested-build-environment

根据下列命名,在你的系统中安装对应的依赖,没找到,查看下上面文档完整的。

# optional, but recommended:
brew install openssl readline

# use Homebrew OpenSSL (note: will not work for ruby < 2.4)
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
rbenv install 2.6.5

# Depending on your version of Ubuntu/Debian/Mint, libgdbm6 won't be available.
# In that case, try an earlier version such as libgdbm5.
apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev

yum install -y gcc-6 bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel

dnf install -y gcc make bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel

zypper in gcc bzip2 libopenssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel

# Possibly you'll also need devel_basis (build-essential on Debian)
zypper install -t pattern devel_basis

2.2 正式安装 Ruby

2.2.1 fetch & 列出所有Ruby版本

asdf list all ruby
.....
2.7.0-preview2
2.7.0-preview3
2.7.0-rc1
2.7.0-rc2
2.7.0
2.7.1
2.7.2
2.7.3
2.7.4
3.0.0-dev
3.0.0-preview1
3.0.0-preview2
3.0.0-rc1
3.0.0
3.0.1
3.0.2
3.1.0-dev
artichoke-dev
jruby-dev
jruby-1.5.6
jruby-1.6.3
jruby-1.6.4
....

挑选感兴趣的版本,比如我们对 3.0.2 感兴趣

安装指定版本

asdf install ruby 3.0.2

自动进入 下载源码,编译,安装

结束了就安装完毕

指定你的Ruby为全局

asdf global ruby 3.0.2

可以设置你的 ruby为系统级别 默认Ruby

打开新的终端,可以 输入 ruby -v 确认下是否安装成功了

到这里安装Ruby的过程愉快的结束。

asdf 的工作只需要做一遍。之后直接 安装指定版本,就好了。

asdf 还支持 local 关键字,局部设置优先级高的解释器,更多参考 asdf

step3 gem

gem 在 ruby 里面是一个标准的打包格式 用来打包 ruby的 库。

下载 gem 默认是 https://rubygems.org/

可以搜索。

这个类似 Python的Pypi、Nodejs的NPM,但是实际上 Gem在他们之前,完成度非常高且非常先进。

3.1 国情网络问题,替换中文源

https://gems.ruby-china.com/

是官方镜像站点。

这里建议 使用 中文源,提高速度

请尽可能用比较新的 RubyGems 版本,建议 2.6.x 以上。

$ gem update --system # 这里请翻墙一下
$ gem -v
2.6.3

$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.com
# 确保只有 gems.ruby-china.com

3.2 隐藏问题 -- 找不到命令

当我们通过 gem 安装的工具,比如 step4 要提到的 bundler、或者著名框架 rails 他们的命令本身都可以被当成可执行命令执行

# 你其实没看错,执行的时候 叫 bundle
bundle install 


rails new my-project

如果我已经安装了,但是终端提示并没有找到命令怎么办?

执行下面命令,刷新 Ruby 安装路径的 path。新打开一个终端重新执行你需要的命令

asdf reshim ruby

step4 Bundler

https://bundler.io/ 是一款建立在 Gem 机制之上,并且可以批量安装 gem 的方便工具。

一般项目中,我们会用 Bundler 帮我们管理。

这个作用类似于 JavaScript 里面的 NPM 和 package.json 发挥的作用。

我们在设置好 step3 的 gem 的时候,首先,让我们全局安装下 Bundler

gem install bundler

然后我们后续的日常使用,都可以借助 bundler提高效率。更多 bundler 的指导可以参考 bundler 官网。

4.1 给bundler替换源

执行下这句,以后 bundler 的命令,我们也不用关心源了。

# 你没看到,他在工作的时候,叫  bundle
bundle config mirror.https://rubygems.org https://gems.ruby-china.com

总结

走到这步,你拥有了一个可以完全使用的开发环境

其他

Dockerfile 参考

FROM ruby:2.7.4-alpine3.14

RUN apk add --update --no-cache \
  build-base \
  postgresql-dev \
  tzdata

RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
RUN gem install bundler 
RUN bundle config mirror.https://rubygems.org https://gems.ruby-china.com


WORKDIR /app

RUN gem install bundler 
RUN bundle config set --local path 'vendor/bundle'

# Install gems
ADD Gemfile* /app/

RUN bundle install

COPY . .

# use APP_ENV
CMD bundle exec rake server:run

EXPOSE 3000


MIX CODER

评论 (0)

Sign in to comment