<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>chenyihu</title>
    <link>https://ruby-china.org/chenyihu</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>ROR 环境搭建小结~强大的 RVM</title>
      <description>&lt;p&gt;初入 ROR，倒腾了下环境，记录一下。&lt;/p&gt;

&lt;p&gt;搭建步骤参考论坛的 &lt;a href="https://ruby-china.org/wiki/install_ruby_guide" title=""&gt;Wiki&lt;/a&gt; 
之前做过 iOS 开发，机器上已经装好了很多开发工具，比如 &lt;code&gt;Xcode&lt;/code&gt; 等，所以前面跳过，主要是搞定 &lt;a href="http://rvm.io/" rel="nofollow" target="_blank" title=""&gt;RVM&lt;/a&gt;, &lt;a href="https://rubygems.org/" rel="nofollow" target="_blank" title=""&gt;RubyGems&lt;/a&gt;, &lt;a href="http://bundler.io/" rel="nofollow" target="_blank" title=""&gt;Bundler&lt;/a&gt;, &lt;a href="http://rubyonrails.org/" rel="nofollow" target="_blank" title=""&gt;Rails&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="RVM"&gt;RVM&lt;/h2&gt;
&lt;p&gt;安装和使用参考论坛 &lt;a href="https://ruby-china.org/wiki/rvm-guide" title=""&gt;Wiki&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;完成之后整个系统的 Ruby 环境都被 RVM 所管理，以前安装的 Gem 也不能用了：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pod
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:296:in &lt;span class="sb"&gt;`&lt;/span&gt;to_specs&lt;span class="s1"&gt;': Could not find '&lt;/span&gt;cocoapods&lt;span class="s1"&gt;' (&amp;gt;= 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'&lt;/span&gt;
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:47:in &lt;span class="sb"&gt;`&lt;/span&gt;gem&lt;span class="s1"&gt;'
    from /usr/local/bin/pod:22:in `&amp;lt;main&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;没关系，只要用 RVM 重建就可以了。&lt;/p&gt;
&lt;h2 id="Global gemsets"&gt;Global gemsets&lt;/h2&gt;
&lt;p&gt;可以先不安装 Ruby，设置下  &lt;code&gt;global gemsets&lt;/code&gt; 把常用的 Gem 加进去，这样每次使用 RVM 安装 Ruby 都会自动把其中的 Gem 同时安装好，可以节省不少时间。详见 &lt;a href="[Initializing%20Gemsets%20during%20Ruby%20Installs](https://rvm.io/gemsets/initial)" title=""&gt;这篇文档&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;subl ~/.rvm/gemsets/global.gems&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem-wrappers
rubygems-bundler 
rake
rvm
rails       
rubocop         
cocoapods   
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;设置下 &lt;code&gt;.gemrc&lt;/code&gt; ，切换源到淘宝，同时忽略文档安装：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;subl ~/.gemrc&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:sources:
- https://ruby.taobao.org/
:update_sources: true
:verbose: true
gem: --no-document --no-ri 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后就可以使用 RVM 安装一个 Ruby 版本，考虑到目前大多数教程都基于 2.0，直接运行：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ rvm list known
...
$ rvm install 2.0.0
...
$ rvm 2.0.0 --default
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装完之后，&lt;code&gt;global gemsets&lt;/code&gt; 里的 Gem 也自动装好可以用了：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rails &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;Rails 4.2.6
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Gem"&gt;Gem&lt;/h2&gt;
&lt;p&gt;安装 Gem 需要注意下环境，因为 RVM 会把不同版本的 Ruby 的 Gem 进行分离，同时还有 gemsets 机制，一般不用 gemsets 而是使用 Bundler，但是一些常用的工具 Gem 安装到 global gemsets 还不错，因为 gemsets 可以分享给所有 Ruby 版本使用：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ rvm @global do gem install [gem_name]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ rvm 2.0.0@global
$ gem install [gem_name]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不要使用 &lt;code&gt;sudo gem install&lt;/code&gt; 详见 &lt;a href="https://rvm.io/rubies/rubygems" rel="nofollow" target="_blank" title=""&gt;这篇文档&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;常用 Gem 命令：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem&amp;nbsp;-v&amp;nbsp;
gem&amp;nbsp;install&amp;nbsp;gem_name&amp;nbsp;
gem&amp;nbsp;list&amp;nbsp;
gem&amp;nbsp;update&amp;nbsp;gem_name&amp;nbsp;
gem&amp;nbsp;update&amp;nbsp;
gem&amp;nbsp;install&amp;nbsp;-v&amp;nbsp;x.x.x&amp;nbsp;gemname&amp;nbsp;
gem&amp;nbsp;uninstall&amp;nbsp;gem_name&amp;nbsp;
gem list --local gem_name
gem search gem_name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;版本更新：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rvm rubygems current
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删掉所有 Gem &lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Rubygems &amp;gt;= 2.1.0
gem uninstall -aIx
# Rubgems &amp;lt; 2.1.0
for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Rails &amp;amp; Bundler"&gt;Rails &amp;amp; Bundler&lt;/h2&gt;
&lt;p&gt;因为设置了 global gemsets 所以 rails 也被自动安装好了，可以愉快的开始 ROR 之旅，
但是需要注意环境，错误的版本环境就没法和教程上的例子保持一致。&lt;/p&gt;

&lt;p&gt;因为自动安装好的是 Rails 4.2.6，所以需要首先安装教程对应的 Rails 版本，比如 4.0.0&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install rails -v 4.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后到工作目录下使用这个&lt;strong&gt;特定版本&lt;/strong&gt;的 Rails 创建工程&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails _4.0.0_ new project
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后锁定此目录的 Ruby 环境，支持 rbenv，详见 &lt;a href="https://rvm.io/workflow/projects" rel="nofollow" target="_blank" title=""&gt;这篇文档&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo 1.9.3 &amp;gt; .ruby-version   # OR:
rvm --ruby-version use 1.9.3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此时可以修改 Gemfile 锁定 Gem 的版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ 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
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为 RVM 自动集成 &lt;a href="https://github.com/rvm/rubygems-bundler" rel="nofollow" target="_blank" title=""&gt;rvmgems-bundler&lt;/a&gt; 所以在这个目录下可以直接根据 Gemfile 的配置运行 &lt;code&gt;rails, rake, rspec&lt;/code&gt; 等命令，而不再需要 &lt;code&gt;bin/rails&lt;/code&gt; 或者 &lt;code&gt;bundle exec rails&lt;/code&gt;，Happy :)&lt;/p&gt;

&lt;p&gt;Done!&lt;/p&gt;
&lt;h2 id="环境检测"&gt;环境检测&lt;/h2&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;which ruby
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$PATH&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$GEM_HOME&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$GEM_PATH&lt;/span&gt;
gem &lt;span class="nb"&gt;env
&lt;/span&gt;which rake
rvm gemdir
gem which gem_name  &lt;span class="c"&gt;# 非常好用&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="扩展阅读"&gt;扩展阅读&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://ruby-china.org/topics/28453" title=""&gt;Bundler 到底是怎么工作的 (暨 Ruby 依赖管理历史回顾)&lt;/a&gt;
&lt;a href="https://ruby-china.org/topics/20836" title=""&gt;RVM 与 Bundler 的爱恨情仇&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;总结：RVM 很强大，基本上搞定了所有开发环境相关问题。&lt;/p&gt;</description>
      <author>chenyihu</author>
      <pubDate>Thu, 23 Jun 2016 07:32:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/30351</link>
      <guid>https://ruby-china.org/topics/30351</guid>
    </item>
  </channel>
</rss>
