初入 ROR,倒腾了下环境,记录一下。
搭建步骤参考论坛的 Wiki
之前做过 iOS 开发,机器上已经装好了很多开发工具,比如 Xcode
等,所以前面跳过,主要是搞定 RVM, RubyGems, Bundler, Rails
安装和使用参考论坛 Wiki
完成之后整个系统的 Ruby 环境都被 RVM 所管理,以前安装的 Gem 也不能用了:
$ pod
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:296:in `to_specs': Could not find 'cocoapods' (>= 0) among 99 total gem(s) (Gem::LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:307:in `to_spec'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:47:in `gem'
from /usr/local/bin/pod:22:in `<main>'
没关系,只要用 RVM 重建就可以了。
可以先不安装 Ruby,设置下 global gemsets
把常用的 Gem 加进去,这样每次使用 RVM 安装 Ruby 都会自动把其中的 Gem 同时安装好,可以节省不少时间。详见 这篇文档
subl ~/.rvm/gemsets/global.gems
gem-wrappers
rubygems-bundler
rake
rvm
rails
rubocop
cocoapods
设置下 .gemrc
,切换源到淘宝,同时忽略文档安装:
subl ~/.gemrc
:sources:
- https://ruby.taobao.org/
:update_sources: true
:verbose: true
gem: --no-document --no-ri
然后就可以使用 RVM 安装一个 Ruby 版本,考虑到目前大多数教程都基于 2.0,直接运行:
$ rvm list known
...
$ rvm install 2.0.0
...
$ rvm 2.0.0 --default
安装完之后,global gemsets
里的 Gem 也自动装好可以用了:
$ rails -v
$ Rails 4.2.6
安装 Gem 需要注意下环境,因为 RVM 会把不同版本的 Ruby 的 Gem 进行分离,同时还有 gemsets 机制,一般不用 gemsets 而是使用 Bundler,但是一些常用的工具 Gem 安装到 global gemsets 还不错,因为 gemsets 可以分享给所有 Ruby 版本使用:
$ rvm @global do gem install [gem_name]
or
$ rvm 2.0.0@global
$ gem install [gem_name]
不要使用 sudo gem install
详见 这篇文档
常用 Gem 命令:
gem -v
gem install gem_name
gem list
gem update gem_name
gem update
gem install -v x.x.x gemname
gem uninstall gem_name
gem list --local gem_name
gem search gem_name
版本更新:
rvm rubygems current
删掉所有 Gem
# Rubygems >= 2.1.0
gem uninstall -aIx
# Rubgems < 2.1.0
for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
因为设置了 global gemsets 所以 rails 也被自动安装好了,可以愉快的开始 ROR 之旅, 但是需要注意环境,错误的版本环境就没法和教程上的例子保持一致。
因为自动安装好的是 Rails 4.2.6,所以需要首先安装教程对应的 Rails 版本,比如 4.0.0
gem install rails -v 4.0.0
然后到工作目录下使用这个特定版本的 Rails 创建工程
rails _4.0.0_ new project
然后锁定此目录的 Ruby 环境,支持 rbenv,详见 这篇文档
echo 1.9.3 > .ruby-version # OR:
rvm --ruby-version use 1.9.3
此时可以修改 Gemfile 锁定 Gem 的版本:
$ bundle install
...
$ rake about
Ruby version 2.0.0 (x86_64-darwin15.4.0)
RubyGems version 2.4.8
Rack version 1.5.5
Rails version 4.0.0
因为 RVM 自动集成 rvmgems-bundler 所以在这个目录下可以直接根据 Gemfile 的配置运行 rails, rake, rspec
等命令,而不再需要 bin/rails
或者 bundle exec rails
,Happy :)
Done!
which ruby
echo $PATH
echo $GEM_HOME
echo $GEM_PATH
gem env
which rake
rvm gemdir
gem which gem_name # 非常好用
Bundler 到底是怎么工作的 (暨 Ruby 依赖管理历史回顾) RVM 与 Bundler 的爱恨情仇
总结:RVM 很强大,基本上搞定了所有开发环境相关问题。