<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zcxey2911 (刘悦的技术博客)</title>
    <link>https://ruby-china.org/zcxey2911</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>时间老去，Ruby 不死，Ruby 语言基础入门教程之 Ruby3 全平台开发环境搭建 EP00</title>
      <description>&lt;p&gt;如果说电子游戏是第九艺术，那么，编程技术则配得上第十艺术的雅称。艺术发展的普遍规律就是要给与人们对于艺术作品的更高层感受，而 Matz 的 Ruby 语言则正是这样一件艺术品。&lt;/p&gt;

&lt;p&gt;无论是语法还是理念，都让 Ruby 开发者感受到款待，如此，Ruby 代码就像活了过来，它们时而高声，却藏不住优雅，时而细语，却意外地铿锵，真是美妙，这种庄重而温柔的魅力，用那一代奉松本行弘为偶像的人的话说，叫剑胆琴心。现在的话又讲，心有猛虎，细嗅蔷薇。&lt;/p&gt;

&lt;p&gt;本次，让我们再一次全平台构建 Ruby3 开发环境，感受 Ruby3 的魅力。&lt;/p&gt;
&lt;h2 id="Mac平台（ARM/X86）"&gt;Mac 平台（ARM/X86）&lt;/h2&gt;
&lt;p&gt;都知道 Mac 和 Ruby 是天作之合，你中有我，我中有你，衔接得天衣无缝，拉链般重合。&lt;/p&gt;

&lt;p&gt;首先安装 Homebrew，它是一款由 Ruby 开发的包管理工具，目前支持 MacOS 和 Linux 系统，通过 Homebrew，我们可以多快好省地安装最新的 Ruby3.0 以上版本。&lt;/p&gt;

&lt;p&gt;如果是 M 系列芯片的 Mac 电脑，运行命令安装 ARM 架构版本的 Homebrew:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后在终端执行命令 echo $SHELL 获得终端类型：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/bin/zsh =&amp;gt; zsh =&amp;gt; .zprofile  
/bin/bash =&amp;gt; bash =&amp;gt; .bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果是 zsh 终端，输入命令配置环境变量：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' &amp;gt;&amp;gt; ~/.zprofile  
eval "$(/opt/homebrew/bin/brew shellenv)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;反之，bash 终端则输入如下命令：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' &amp;gt;&amp;gt; ~/.bash_profile  
eval "$(/opt/homebrew/bin/brew shellenv)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;从 MacOS Catalina(10.15.x) 版开始，Mac 使用 zsh 为默认终端。&lt;/p&gt;

&lt;p&gt;如果是 Intel 芯片的 Mac，可以选择 X86 架构的 Homebrew:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;arch -x86_64 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后注意 X86 架构的 Homebrew 默认路径为：/usr/local/bin/brew&lt;/p&gt;

&lt;p&gt;然后再执行 source ~/.zprofile 或 source ~/.bash_profile 命令更新文件。&lt;/p&gt;

&lt;p&gt;安装好之后，在终端输入命令，查看 brew 版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ brew -v  
Homebrew 3.6.4  
Homebrew/homebrew-core (git revision 375065e9c3a; last commit 2022-10-05)  
Homebrew/homebrew-cask (git revision 7068d45cf4; last commit 2022-10-05)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;说明安装成功，如果是老版本，可以运行命令进行更新：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ brew cleanup &amp;amp;&amp;amp; brew update  
Already up-to-date.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;除此之外，也可以为 Homebrew 设置一下国内源：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# brew  
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git  

# core  
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git  

# cask  
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git  

echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' &amp;gt;&amp;gt; ~/.zprofile  
source ~/.zprofile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但事实上，有时候国内源由于同步延迟问题，会和国外源有一些微小的差异，而这些差异往往会导致 Ruby 软件的编译失败，所以两种源各有利弊，各自斟酌。&lt;/p&gt;

&lt;p&gt;接下来我们来安装 Ruby3，业界比较主流的安装方式大抵两种：rvm 或者 rbenv，这里我们使用 rbenv，它其实就是一个类似 python 中 conda 一样的多版本管理软件包，可以方便一些老项目以低版本 ruby 运行，比如 ruby1.9：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install ruby-build rbenv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后将 rbenv 命令添加到 zsh 命令行的环境变量中：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo 'if which rbenv &amp;gt; /dev/null; then eval "$(rbenv init -)"; fi' &amp;gt;&amp;gt; ~/.zshrc  
source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启命令行，键入 rbenv：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ rbenv  
rbenv 1.2.0  
Usage: rbenv &amp;lt;command&amp;gt; [&amp;lt;args&amp;gt;]  

Some useful rbenv commands are:  
   commands    List all available rbenv commands  
   local       Set or show the local application-specific Ruby version  
   global      Set or show the global Ruby version  
   shell       Set or show the shell-specific Ruby version  
   install     Install a Ruby version using ruby-build  
   uninstall   Uninstall a specific Ruby version  
   rehash      Rehash rbenv shims (run this after installing executables)  
   version     Show the current Ruby version and its origin  
   versions    List installed Ruby versions  
   which       Display the full path to an executable  
   whence      List all Ruby versions that contain the given executable  

See `rbenv help &amp;lt;command&amp;gt;' for information on a specific command.  
For full documentation, see: https://github.com/rbenv/rbenv#readme
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到最新的 1.2.0 版本。&lt;/p&gt;

&lt;p&gt;随后键入命令查看目前可编译的 Ruby 版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~ rbenv install --list                                                                                 
2.6.10  
2.7.6  
3.0.4  
3.1.2  
jruby-9.3.8.0  
mruby-3.1.0  
picoruby-3.0.0  
rbx-5.0  
truffleruby-22.2.0  
truffleruby+graalvm-22.2.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里我们选择安装 3.0.4 版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rbenv install 3.0.4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装成功后键入 rbenv versions：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~ rbenv versions    
  system  
* 3.0.0 (set by /Users/liuyue/.rbenv/version)  
  3.0.4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;列出所有安装好的版本。&lt;/p&gt;

&lt;p&gt;随后可以使用 rbenv global 命令来切换版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~ rbenv global 3.0.4   
➜  ~ rbenv versions      
  system  
  3.0.0  
* 3.0.4 (set by /Users/liuyue/.rbenv/version)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果某个版本不再需要，也可以进行 uninstall 卸载操作：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ rbenv uninstall 3.0.0  
rbenv: remove /Users/liuyue/.rbenv/versions/3.0.0? [yN] y  
➜  ~ rbenv versions         
  system  
* 3.0.4 (set by /Users/liuyue/.rbenv/version)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;至此，大功告成，接着进入 ruby 命令行工具 irb，终端输入：irb&lt;/p&gt;

&lt;p&gt;与 Python 执行和终端使用同一命令不同的是，Ruby 的执行命令为 ruby，而命令行则是 irb&lt;/p&gt;

&lt;p&gt;irb 是 Ruby 附带的交互式编程环境，它是由石冢启十先生撰写的：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~ irb  
irb(main):001:0&amp;gt; puts "你好,Ruby"  
你好,Ruby  
=&amp;gt; nil
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接着可以使用 exit 或者 quit 命令退出 Ruby 命令行：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ irb  
irb(main):001:0&amp;gt; puts "你好,Ruby"  
你好,Ruby  
=&amp;gt; nil  
irb(main):002:0&amp;gt; exit  
➜  ~
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="Docker（其他平台构建Ruby开发环境）"&gt;Docker（其他平台构建 Ruby 开发环境）&lt;/h2&gt;
&lt;p&gt;如果使用的是 Windows 平台或者其他系统，我们可以使用 Docker 的方式快速搭建环境，Docker 安装请参见：&lt;a href="https://v3u.cn/a_id_185" rel="nofollow" target="_blank" title=""&gt;一寸宕机一寸血，十万容器十万兵|Win10/Mac 系统下基于 Kubernetes(k8s) 搭建 Gunicorn+Flask 高可用 Web 集群&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;安装完成之后，首先下载 ruby3.0.4 镜像：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[root@instance-7dojaq0e ruby3]# docker pull ruby:3.0.4-slim  
3.0.4-slim: Pulling from library/ruby  
31b3f1ad4ce1: Pull complete  
9ecf19185ffb: Pull complete  
7201eddc3a4c: Pull complete  
384b637b5031: Pull complete  
e878247dc643: Pull complete  
Digest: sha256:5b99cbdb905610eb1aa47c24c15b724045e65dab0b5fd1c069f5f722895724e9  
Status: Downloaded newer image for ruby:3.0.4-slim  
docker.io/library/ruby:3.0.4-slim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;下载完成之后，启动容器：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -it ruby:3.0.4-slim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后即可进入 Ruby 命令行：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[root@instance-7dojaq0e ~]# docker run -it ruby:3.0.4-slim  
irb(main):001:0&amp;gt; puts "你好 ruby"  
你好 ruby  
=&amp;gt; nil
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;简单方便。&lt;/p&gt;
&lt;h2 id="结语"&gt;结语&lt;/h2&gt;
&lt;p&gt;按照固有思维方式，人们总以为时下最热门的语言才是学习的目标，但 Ruby 除了基础语法之外，还给了一些看不见、摸不着的东西，我认为这在目前盛行“实惠”价值观的时候，提一提还是必要的。很多事情不用问值不值得，只用问，它对你来说，是不是有若珍宝。最后，谨以此系列教程献给司徒正美兄，我的 Ruby 领路人，真正的 Ruby 高手，大神中的大神，正道是：司徒正美成绝响，人间不见 Ruby's Louvre。&lt;/p&gt;</description>
      <author>zcxey2911</author>
      <pubDate>Wed, 08 Feb 2023 22:02:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/42861</link>
      <guid>https://ruby-china.org/topics/42861</guid>
    </item>
    <item>
      <title>别梦依稀咒逝川，Ruby 二十八年前 |M1 芯片 Mac os 系统配置 Ruby(3.0.0) on Rails(6.1.1) 开发环境 (2021 最新攻略)</title>
      <description>&lt;p&gt;原文转载自「刘悦的技术博客」&lt;a href="https://v3u.cn/a_id_188" rel="nofollow" target="_blank" title=""&gt;https://v3u.cn/a_id_188&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/zcxey2911/b9305d97-69e2-4c55-ab82-d700ce8a32ea.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在每个开发者心里，都会有一门“最好”的语言，在这个世界的某个深处，在一些矫矫不群的人们心中，这门语言的名字叫做 Ruby，它今年二十八岁了，历史和 Java 一样的悠久，但是它没有大厂背书、它的性能被开发者诟病、时至今日依然无法高效利用多核资源，甚至于它每年都要被“死亡”一次，相比于有太阳计算机系统、甲骨文、IBM 这些大公司支持的 Java，它是那么的一无所有，但是，它又拥有全世界最虔诚的“信徒”，拥有最活跃的开发者社区，这一切，又让它是那么的应有尽有。是的，这就是 Rubyist 的理念：有的时候，你想证明给一万个人看，到后来，你发现只得到了一个明白的人，那就够了。&lt;/p&gt;

&lt;p&gt;本次我们尝试在最新的 M1 芯片 Mac os(Big Sur 11.2.2) 中搭建最新版 Ruby3.0.0 以及 Web 开发框架 Rails6.1.1，全新的芯片、全新的征途、全新的开始：&lt;/p&gt;

&lt;p&gt;首先我们来看看 M1 芯片的命令行，如果你是从老版本 Mac 迁移过来的，比如笔者 (Mojave)，最好将老的 Base 命令行更换成 zsh，zsh 是一款功能比 bash 更强大的终端（shell）系统，既可以作为一个交互式终端，也可以作为一个脚本解释器，这里更换必要性是指如果使用 Bash 编译 Ruby3.0，可能会发生一些未知错误。执行命令切换 zsh:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装成功后，确保在应用程序-》实用工具-》终端-》简介中，不要勾选 Rosetta，因为接下来我们需要以 arm 架构的 homebrew 进行安装，所以所有的编译和运行动作都不需要 Rosetta 的参与：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://v3u.cn/v3u/Public/js/editor/attached/20210301120336_71884.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;随后重启终端，开始安装 amr 架构的 Homebrew:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后编辑配置文件 ~/.zshrc，加入如下内容：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;path=('/opt/homebrew/bin' $path)  
export PATH
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;存盘之后执行命令：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看新 brew 的位置：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ which brew  
/opt/homebrew/bin/brew
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果返回的是/opt/homebrew/bin/brew 就说明安装成功，接着更新一下版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ brew cleanup &amp;amp;&amp;amp; brew update  
Already up-to-date.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果没有代理，可以选择设置一下国内源：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# brew  
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git  

# core  
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git  

# cask  
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git  


echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' &amp;gt;&amp;gt; ~/.zprofile  
source ~/.zprofile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来我们来安装 Ruby3.0，业界比较主流的安装方式大抵两种：rvm 或者 rbenv，这里我们使用 rbenv，它其实就是一个类似 python 中 conda 一样的多版本管理软件包，可以方便一些老项目以低版本 ruby 运行，比如 ruby2.6。&lt;/p&gt;

&lt;p&gt;Ruby 依赖 OpenSSL 和 AutoConf 这俩个包，提前预装好，如果是迁移过来的 Openssl 可能版本比较低，最好重新安装最新的 1.1j 版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew reinstall openssl@1.1  
brew reinstall autoconf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后安装 rbenv，执行命令：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install ruby-build rbenv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后将 rbenv 命令添加到 zsh 命令行的环境变量中：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo 'if which rbenv &amp;gt; /dev/null; then eval "$(rbenv init -)"; fi' &amp;gt;&amp;gt; ~/.zshrc  
source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启命令行，键入 rbenv：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ rbenv  
rbenv 1.1.2  
Usage: rbenv &amp;lt;command&amp;gt; [&amp;lt;args&amp;gt;]  

Some useful rbenv commands are:  
   commands    List all available rbenv commands  
   local       Set or show the local application-specific Ruby version  
   global      Set or show the global Ruby version  
   shell       Set or show the shell-specific Ruby version  
   install     Install a Ruby version using ruby-build  
   uninstall   Uninstall a specific Ruby version  
   rehash      Rehash rbenv shims (run this after installing executables)  
   version     Show the current Ruby version and its origin  
   versions    List installed Ruby versions  
   which       Display the full path to an executable  
   whence      List all Ruby versions that contain the given executable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果返回版本号和相关操作，问题就不大了，不过最好通过脚本诊断一下，确保后续编译不会出问题：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;诊断没有报错误即可：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash  
Checking for `rbenv' in PATH: /opt/homebrew/bin/rbenv  
Checking for rbenv shims in PATH: OK  
Checking `rbenv install' support: multiple  
  You seem to have multiple `rbenv-install' in the following locations.  
  Please pick just one installation and remove the others.  

  /Users/liuyue/.rbenv/plugins/ruby-build/bin/rbenv-install  
  /opt/homebrew/bin/rbenv-install  

Counting installed Ruby versions: 1 versions  
Checking RubyGems settings: OK  
Auditing installed plugins: OK
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来，由于众所周知的学术问题，rbenv 下载二进制安装包会非常的缓慢，所以我们可以通过国内镜像来手动下载：&lt;a href="https://cache.ruby-china.com/pub/ruby/" rel="nofollow" target="_blank"&gt;https://cache.ruby-china.com/pub/ruby/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这里下载 ruby3.0 正式版：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://v3u.cn/v3u/Public/js/editor/attached/20210301130321_98485.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;然后将压缩包手动拷贝到 rbenv 的安装目录：~/.rbenv/cache&lt;/p&gt;

&lt;p&gt;这里的~/.rbenv/cache 有可能不存在，可以手动创建：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir ~/.rbenv/cache
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;拷贝安装包：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp ~/Downloads/ruby-3.0.0.tar.gz ~/.rbenv/cache/ruby-3.0.0.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;紧接着我们终于可以安装 Ruby3.0 本体了：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew link openssl --force  

RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt/homebrew/Cellar/openssl@1.1/1.1.1j  rbenv install 3.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于笔者之前安装过 openssl，所以这次强制指定由 arm 架构的 openssl 来编译安装。&lt;/p&gt;

&lt;p&gt;安装成功后键入 rbenv versions：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ rbenv versions       
* system (set by /Users/liuyue/.rbenv/version)  
  3.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到，除了 M1 系统默认的版本，又出现了一个 3.0.0 版本，我们可以使用 rbenv global 命令来切换版本：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ rbenv global 3.0.0   
➜  ~ rbenv versions  
  system  
* 3.0.0 (set by /Users/liuyue/.rbenv/version)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后输入 ruby -v:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ ruby -v  
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [arm64-darwin20]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到版本已经切换到 3.0，并且内核版本是 arm64 位，如果需要系统默认版本，还可以切回来：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ rbenv global system  
➜  ~ ruby -v              
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.arm64e-darwin20]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;系统默认是 ruby 2.6.3，最好不要动它。&lt;/p&gt;

&lt;p&gt;接着我们就可以安装 Rails 了：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install rails -v 6.1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装成功后，刷新一下：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rbenv rehash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后查看版本号：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ rails -v  
Rails 6.1.1  
➜  ~
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建一个新项目：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails new myrails
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;进入项目目录：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd myrails
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启动服务：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;千呼万唤始出来：&lt;/p&gt;

&lt;p&gt;&lt;img src="https://v3u.cn/v3u/Public/js/editor/attached/20210301130344_56208.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;结语：作为同龄语言，如果说 Java 是闪现在天上的瑰丽，那么 Ruby 就是埋藏于地底的炽热，同样伟大但各擅胜场，而事实上同样作为脚本语言的 Ruby 更多的是在和 Python 对比，Python 近几年在数据分析和深度学习领域的突飞猛进让 Ruby 难以望其项背，而 Ruby 在 Mac 系统中软件包管理层面却有着统治级的地位，就像你玩儿 Mac 就避免不了 Homebrew，接触 Homebrew 就无法躲开 Ruby。很多人唱衰 Ruby，认为它过时了，而在 Rubyist 的心中则正相反，它太超前了，正是和 M1 芯片一样，是超越时代的产物，也许有一天，它会“死亡”，但绝不会是今天，最后，用十九世纪美国小说家赫尔曼·梅尔维尔《白鲸》中的一节和诸君共勉：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“有些人死在退潮里；有些人死在浅水滩里；有些人却死在洪水里。” ——第一百三十五章，亚哈最后一次追击白鲸时，对阻拦他的大副斯达巴克说。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;原文转载自「刘悦的技术博客」 &lt;a href="https://v3u.cn/a_id_188" rel="nofollow" target="_blank" title=""&gt;https://v3u.cn/a_id_188&lt;/a&gt;&lt;/p&gt;</description>
      <author>zcxey2911</author>
      <pubDate>Mon, 01 Mar 2021 18:35:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/40975</link>
      <guid>https://ruby-china.org/topics/40975</guid>
    </item>
    <item>
      <title>基于 Docker 在 Win10 平台搭建 Ruby on Rails 6.0 框架开发环境</title>
      <description>&lt;p&gt;原文转载自「刘悦的技术博客」&lt;a href="https://v3u.cn/a_id_170" rel="nofollow" target="_blank" title=""&gt;https://v3u.cn/a_id_170&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2020 年，“非著名 Web 框架”--Ruby on Rails 已经 15 岁了。在今年，Rails 6.0 趋于完善，除了拿掉讨厌的 Jquery，Webpacker 也成为默认前端打包方案，Sprockets 开始软着陆，未来很可能会和 Jquery 一样被彻底废弃，这就是历史的进程。&lt;/p&gt;

&lt;p&gt;由于历史原因，本身就由 Ruby 撰写的 HomeBrew 在 Mac os 系统上大行其道，所以大部分 Rails 程序员的主力电脑都是 Mac book pro，而使用 Windows 系统的用户就没那么好运了，比如 Rails 6.0 开始启用 Webpacker，这就需要用户安装 yarn，由此带来一系列的连锁反应，还有令人绝望的 Win10 系统下的 CoffeeScript 问题，这也是 Rails 包括 Jekyll 时常令人诟病因素之一：搭个环境都这么费劲，我为啥不用 Django、Laravel 亦或者是 Springboot 呢？为什么非得受这份罪呢？因为.......热爱，本次我们使用 Docker 来简化 Rails 环境的搭建，让它能够在各个操作系统下做到无缝开发。&lt;/p&gt;

&lt;p&gt;当然了，第一步还是安装 Docker，没有安装的朋友请参照：&lt;a href="https://v3u.cn/a_id_149" rel="nofollow" target="_blank" title=""&gt;win10 系统下把玩折腾 DockerToolBox 以及更换国内镜像源 (各种神坑)&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;然后在电脑内建立一个 rails 项目的目录&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir myr  
cd myr
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第三步，拉取基础镜像，该镜像内置了 ruby2.5.1 和 node11 为我们安装 Rails6.0 打好基础&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull starefossen/ruby-node
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;拉取镜像成功后，启动容器并且进入命令行，记住用挂载命令把当前目录共享到 Docker 容器内部，不会设置共享文件夹的同学可以参照这篇文章：&lt;a href="https://v3u.cn/a_id_166" rel="nofollow" target="_blank" title=""&gt;上穷碧落下凡尘:Win10 系统下基于 Docker 配置 Elasticsearch7 配合 Python3 进行全文检索交互&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --rm -v /myr:/usr/src -w /usr/src -ti starefossen/ruby-node /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;由于在容器内部已经安装好 ruby2.5.1，所以 gem 也随之安装好，那么我们可以在容易内部安装 Rails&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem install -v 6.0.2 rails
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里用-v 参数可控制版本号。&lt;/p&gt;

&lt;p&gt;在容器内安装 Rails6.0 成功之后，直接在容器内建立项目&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails new .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;项目建立好以后，你会发现在 windows 目录会同步出现 Rails 项目文件&lt;/p&gt;

&lt;p&gt;&lt;img src="https://v3u.cn/v3u/Public/js/editor/attached/20200804220844_35733.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此时，在容器命令行内输入 exit 退出容器，此时容器就会停止并且删除，这个容器也完成了它的历史任务，它的存在就是帮我们创建好一个 Rails 项目，并且通过共享文件的形式在宿主机同步。&lt;/p&gt;

&lt;p&gt;下一步，为了能在宿主机运行我们的 Rails 服务，需要一个 Dockerfile 文件来定制我们自己的镜像&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM starefossen/ruby-node  

# 设置项目目录  
WORKDIR /usr/src/app  

# 设置配置文件  
COPY Gemfile* ./  
RUN bundle install  

# 拷贝文件  
COPY . ./  

# 暴露端口  
EXPOSE 3000  

# 启动服务命令  
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;写好 Dockerfile 之后，我们就可以打造一个全新的镜像，这个镜像用来运行我们已经建立好的 Rails 项目。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t myr .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;打包成功后，输入命令查看镜像&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://v3u.cn/v3u/Public/js/editor/attached/20200804220845_23254.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此时，启动容器&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -p 3000:3000 -v /myr:/usr/src/app/ myr
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;访问一下 &lt;a href="http://localhost:3000" rel="nofollow" target="_blank"&gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://v3u.cn/v3u/Public/js/editor/attached/20200804220839_99469.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;熟悉的“世界人民大团结”欢迎页面已经映入眼帘，就是这么的简单，有人说了，Python 才是如今的“当红炸子鸡”，现在学习 Rails 会不会是“四九年入国军”？我想说的是，时至今年，全球依然有超过一亿的网站和后台服务由 Rails 驱动，其中不乏国际知名企业，如：Airbnb、Basecamp、Github 等，尽管 Php 和 Python 的使用范围比 Ruby 更广，但其最受欢迎的两个框架 Laravel 和 Django 分别比 Rails 的代码贡献者要少很多。更多的开源代码贡献者意味着 Gem 的质量非常之好，俗话说，Gem 为 Rails 倾尽了所有，而 Rails 经常被人们盛赞，也是因为支持它的社区正在努力创建非常多可重用的库。&lt;/p&gt;

&lt;p&gt;我们可以看看在 github 上的开源代码贡献者的数量对比：&lt;/p&gt;

&lt;p&gt;GitHub contributors to Ruby frameworks:  &lt;/p&gt;

&lt;p&gt;Rails: 4260&lt;br&gt;
Padrino: 228&lt;br&gt;
Hanami: 146&lt;br&gt;
Sinatra: 387  &lt;/p&gt;

&lt;p&gt;GitHub contributors to Django (Python) and Laravel (PHP):  &lt;/p&gt;

&lt;p&gt;Django: 2,007&lt;br&gt;
Laravel: 740&lt;/p&gt;

&lt;p&gt;差距可见一斑，归根结底，一款框架的开发和使用还是得以“人”为本。一如既往，专注 web，专注产品的 Rails6.0 在新的时代里一定会继往开来、再创辉煌。&lt;/p&gt;

&lt;p&gt;原文转载自「刘悦的技术博客」 &lt;a href="https://v3u.cn/a_id_170" rel="nofollow" target="_blank" title=""&gt;https://v3u.cn/a_id_170&lt;/a&gt;&lt;/p&gt;</description>
      <author>zcxey2911</author>
      <pubDate>Tue, 17 Nov 2020 22:34:55 +0800</pubDate>
      <link>https://ruby-china.org/topics/40586</link>
      <guid>https://ruby-china.org/topics/40586</guid>
    </item>
  </channel>
</rss>
