Ruby环境搭建asdf+ruby+gem+bundler+源替换
适用于新手搭建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 [email protected])"
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 国情网络问题,替换中文源
是官方镜像站点。
这里建议 使用 中文源,提高速度
请尽可能用比较新的 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