别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境

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

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

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

首先我们来看看M1芯片的命令行,如果你是从老版本Mac迁移过来的,比如笔者(Mojave),最好将老的Bash命令行更换成zsh,zsh是一款功能比bash更强大的终端(shell)系统,既可以作为一个交互式终端,也可以作为一个脚本解释器,这里更换必要性是指如果使用Bash编译Ruby3.0,可能会发生一些未知错误。执行命令切换zsh:

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装成功后,确保在应用程序-》实用工具-》终端-》简介中,不要勾选Rosetta,因为接下来我们需要以arm架构的homebrew进行安装,所以所有的编译和运行动作都不需要Rosetta的参与:

随后重启终端,开始安装amr架构的Homebrew:

/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"

然后编辑配置文件 ~/.zshrc,加入如下内容:

path=('/opt/homebrew/bin' $path)  
export PATH

存盘之后执行命令:

source ~/.zshrc

查看新brew的位置:

➜  ~ which brew  
/opt/homebrew/bin/brew

如果返回的是/opt/homebrew/bin/brew就说明安装成功,接着更新一下版本:

➜  ~ brew cleanup && brew update  
Already up-to-date.

如果没有代理,可以选择设置一下国内源:

# 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' >> ~/.zprofile  
source ~/.zprofile

接下来我们来安装Ruby3.0,业界比较主流的安装方式大抵两种:rvm或者rbenv,这里我们使用rbenv,它其实就是一个类似python中conda一样的多版本管理软件包,可以方便一些老项目以低版本ruby运行,比如ruby2.6。

Ruby 依赖 OpenSSL和AutoConf这俩个包,提前预装好,如果是迁移过来的Openssl可能版本比较低,最好重新安装最新的1.1j版本:

brew reinstall openssl@1.1  
brew reinstall autoconf

随后安装rbenv,执行命令:

brew install ruby-build rbenv

之后将rbenv命令添加到zsh命令行的环境变量中:

echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.zshrc  
source ~/.zshrc

重启命令行,键入rbenv:

➜  ~ rbenv  
rbenv 1.1.2  
Usage: rbenv <command> [<args>]  
  
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

如果返回版本号和相关操作,问题就不大了,不过最好通过脚本诊断一下,确保后续编译不会出问题:

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

诊断没有报错误即可:

➜  ~ 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

接下来,由于众所周知的学术问题,rbenv下载二进制安装包会非常的缓慢,所以我们可以通过国内镜像来手动下载:https://cache.ruby-china.com/pub/ruby/

这里下载ruby3.0正式版:

然后将压缩包手动拷贝到rbenv的安装目录:~/.rbenv/cache

这里的~/.rbenv/cache有可能不存在,可以手动创建:

mkdir ~/.rbenv/cache

拷贝安装包:

cp ~/Downloads/ruby-3.0.0.tar.gz ~/.rbenv/cache/ruby-3.0.0.tar.gz

紧接着我们终于可以安装Ruby3.0本体了:

brew link openssl --force  
  
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt/homebrew/Cellar/openssl@1.1/1.1.1j  rbenv install 3.0.0

由于笔者之前安装过openssl,所以这次强制指定由arm架构的openssl来编译安装。

安装成功后键入rbenv versions:

➜  ~ rbenv versions       
* system (set by /Users/liuyue/.rbenv/version)  
  3.0.0

可以看到,除了M1系统默认的版本,又出现了一个3.0.0版本,我们可以使用 rbenv global命令来切换版本:

➜  ~ rbenv global 3.0.0   
➜  ~ rbenv versions  
  system  
* 3.0.0 (set by /Users/liuyue/.rbenv/version)

随后输入ruby -v:

➜  ~ ruby -v  
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [arm64-darwin20]

可以看到版本已经切换到3.0,并且内核版本是arm64位,如果需要系统默认版本,还可以切回来:

➜  ~ rbenv global system  
➜  ~ ruby -v              
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.arm64e-darwin20]

系统默认是ruby 2.6.3,最好不要动它。

接着我们就可以安装Rails了:

gem install rails -v 6.1.1

安装成功后,刷新一下:

rbenv rehash

然后查看版本号:

➜  ~ rails -v  
Rails 6.1.1  
➜  ~

创建一个新项目:

rails new myrails

进入项目目录:

cd myrails

启动服务:

rails s

千呼万唤始出来:

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

“有些人死在退潮里;有些人死在浅水滩里;有些人却死在洪水里。” ——第一百三十五章,亚哈最后一次追击白鲸时,对阻拦他的大副斯达巴克说。
相关文章
|
28天前
|
应用服务中间件 开发工具 nginx
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端 最近换了台新 Mac,所有的配置和软件就重新安装下,顺便写个文章。
82 1
|
1月前
|
iOS开发 MacOS
mac bookpro m1 笔记本关闭键盘屏幕 禁用键盘屏幕使用 键盘屏幕误触 Touch Bar禁用 禁用MacBook-Pro的触摸栏
mac bookpro m1 笔记本关闭键盘屏幕 禁用键盘屏幕使用 键盘屏幕误触 Touch Bar禁用 禁用MacBook-Pro的触摸栏
51 3
|
2月前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
168 1
|
26天前
|
前端开发 测试技术 数据库
Ruby on Rails:快速开发Web应用的秘密
【6月更文挑战第9天】Ruby on Rails,一款基于Ruby的Web开发框架,以其高效、简洁和强大备受青睐。通过“约定优于配置”减少配置工作,内置丰富功能库加速开发,如路由、数据库访问。活跃的社区和海量资源提供支持,MVC架构与RESTful设计确保代码清晰可扩展。高效的数据库迁移和测试工具保证质量。Rails是快速构建Web应用的理想选择,未来将持续影响Web开发领域。
|
1月前
|
应用服务中间件 Shell nginx
mac m1笔记本docker 安装nginx
mac m1笔记本docker 安装nginx
87 4
|
2月前
|
开发框架 安全 前端开发
使用Ruby on Rails进行快速Web开发
【5月更文挑战第27天】Ruby on Rails是一款基于Ruby的高效Web开发框架,以其快速开发、简洁优雅和强大的社区支持著称。遵循“约定优于配置”,Rails简化了开发流程,通过MVC架构保持代码清晰。安装Ruby和Rails后,可使用命令行工具创建项目、定义模型、控制器和视图,配置路由,并运行测试。借助Gem扩展功能,优化性能和确保安全性,Rails是快速构建高质量Web应用的理想选择。
|
21天前
|
Linux Docker Python
【docker】Mac M1 构建 x64 linux镜像
【docker】Mac M1 构建 x64 linux镜像
33 0
|
2月前
|
安全 iOS开发 MacOS
Mac pro升级 MacOS 10.15 Catalina 后根目录是只读的, Recovery OS不能访问
Mac pro升级 MacOS 10.15 Catalina 后根目录是只读的, Recovery OS不能访问
29 0
|
21天前
|
存储 缓存 安全
Linux基础——冯诺依曼体系结构与操作系统
Linux基础——冯诺依曼体系结构与操作系统
42 1
Linux基础——冯诺依曼体系结构与操作系统
|
3天前
|
机器学习/深度学习 自然语言处理 运维
正式邀测! OS Copilot——一款基于大模型构建的 Linux 智能操作系统助手
重塑操作系统交互新体验,开启您的智能化系统管理之旅。