在每个开发者心里,都会有一门最好的语言,在这个世界的某个深处,在一些矫矫不群的人们心中,这门语言的名字叫做Ruby,它今年二十八岁了,历史和Java一样的悠久,但是它没有大厂背书、它的性能被开发者诟病、时至今日依然无法高效利用多核资源,甚至于它每年都要被死亡一次,相比于有太阳计算机系统、甲骨文、IBM这些大公司支持的Java,它是那么的一无所有,但是,它又拥有全世界最虔诚的信徒,拥有最活跃的开发者社区,这一切,又让它是那么的应有尽有。是的,这就是Rubyist的理念:有的时候,你想证明给一万个人看,到后来,你发现只得到了一个明白的人,那就够了。 本次我们尝试在最新的M1芯片Macos(BigSur11。2。2)中搭建最新版Ruby3。0。0以及Web开发框架Rails6。1。1,全新的芯片、全新的征途、全新的开始: 首先我们来看看M1芯片的命令行,如果你是从老版本Mac迁移过来的,比如笔者(Mojave),最好将老的Bash命令行更换成zsh,zsh是一款功能比bash更强大的终端(shell)系统,既可以作为一个交互式终端,也可以作为一个脚本解释器,这里更换必要性是指如果使用Bash编译Ruby3。0,可能会发生一些未知错误。执行命令切换zsh:shc(curlfsSLhttps:raw。github。comohmyzshohmyzshmastertoolsinstall。sh) 安装成功后,确保在应用程序》实用工具》终端》简介中,不要勾选Rosetta,因为接下来我们需要以arm架构的homebrew进行安装,所以所有的编译和运行动作都不需要Rosetta的参与: 随后重启终端,开始安装amr架构的Homebrew:binbashc(curlfsSLhttps:cdn。jsdelivr。netghineo6homebrewinstallinstall。sh) 然后编辑配置文件。zshrc,加入如下内容:path(opthomebrewbinpath)exportPATH 存盘之后执行命令:source。zshrc 查看新brew的位置:whichbrewopthomebrewbinbrew 如果返回的是opthomebrewbinbrew就说明安装成功,接着更新一下版本:brewcleanupbrewupdateAlreadyuptodate。 如果没有代理,可以选择设置一下国内源:brewgitC(brewrepo)remoteseturloriginhttps:mirrors。ustc。edu。cnbrew。gitcoregitC(brewrepohomebrewcore)remoteseturloriginhttps:mirrors。ustc。edu。cnhomebrewcore。gitcaskgitC(brewrepohomebrewcask)remoteseturloriginhttps:mirrors。ustc。edu。cnhomebrewcask。gitechoexportHOMEBREWBOTTLEDOMAINhttps:mirrors。ustc。edu。cnhomebrewbottles。zprofilesource。zprofile 接下来我们来安装Ruby3。0,业界比较主流的安装方式大抵两种:rvm或者rbenv,这里我们使用rbenv,它其实就是一个类似python中conda一样的多版本管理软件包,可以方便一些老项目以低版本ruby运行,比如ruby2。6。 Ruby依赖OpenSSL和AutoConf这俩个包,提前预装好,如果是迁移过来的Openssl可能版本比较低,最好重新安装最新的1。1j版本:brewreinstallopenssl1。1brewreinstallautoconf 随后安装rbenv,执行命令:brewinstallrubybuildrbenv 之后将rbenv命令添加到zsh命令行的环境变量中:echoifwhichrbenvdevnull;theneval(rbenvinit);fi。zshrcsource。zshrc 重启命令行,键入rbenv:rbenvrbenv1。1。2Usage:rbenvcommand〔〕Someusefulrbenvcommandsare:commandsListallavailablerbenvcommandslocalSetorshowthelocalapplicationspecificRubyversionglobalSetorshowtheglobalRubyversionshellSetorshowtheshellspecificRubyversioninstallInstallaRubyversionusingrubybuilduninstallUninstallaspecificRubyversionrehashRehashrbenvshims(runthisafterinstallingexecutables)versionShowthecurrentRubyversionanditsoriginversionsListinstalledRubyversionswhichDisplaythefullpathtoanexecutablewhenceListallRubyversionsthatcontainthegivenexecutable 如果返回版本号和相关操作,问题就不大了,不过最好通过脚本诊断一下,确保后续编译不会出问题:curlfsSLhttps:github。comrbenvrbenvinstallerrawmasterbinrbenvdoctorbash 诊断没有报错误即可:curlfsSLhttps:github。comrbenvrbenvinstallerrawmasterbinrbenvdoctorbashCheckingforrbenvinPATH:opthomebrewbinrbenvCheckingforrbenvshimsinPATH:OKCheckingrbenvinstallsupport:multipleYouseemtohavemultiplerbenvinstallinthefollowinglocations。Pleasepickjustoneinstallationandremovetheothers。Usersliuyue。rbenvpluginsrubybuildbinrbenvinstallopthomebrewbinrbenvinstallCountinginstalledRubyversions:1versionsCheckingRubyGemssettings:OKAuditinginstalledplugins:OK 接下来,由于众所周知的学术问题,rbenv下载二进制安装包会非常的缓慢,所以我们可以通过国内镜像来手动下载:https:cache。rubychina。compubruby 这里下载ruby3。0正式版: 然后将压缩包手动拷贝到rbenv的安装目录:。rbenvcache 这里的。rbenvcache有可能不存在,可以手动创建:mkdir。rbenvcache 拷贝安装包:cpDownloadsruby3。0。0。tar。gz。rbenvcacheruby3。0。0。tar。gz 紧接着我们终于可以安装Ruby3。0本体了:brewlinkopensslforceRUBYCONFIGUREOPTSwithopenssldiropthomebrewCellaropenssl1。11。1。1jrbenvinstall3。0。0 由于笔者之前安装过openssl,所以这次强制指定由arm架构的openssl来编译安装。 安装成功后键入rbenvversions:rbenvversionssystem(setbyUsersliuyue。rbenvversion)3。0。0 可以看到,除了M1系统默认的版本,又出现了一个3。0。0版本,我们可以使用rbenvglobal命令来切换版本:rbenvglobal3。0。0rbenvversionssystem3。0。0(setbyUsersliuyue。rbenvversion) 随后输入rubyv:rubyvruby3。0。0p0(20201225revision95aff21468)〔arm64darwin20〕 可以看到版本已经切换到3。0,并且内核版本是arm64位,如果需要系统默认版本,还可以切回来:rbenvglobalsystemrubyvruby2。6。3p62(20190416revision67580)〔universal。arm64edarwin20〕 系统默认是ruby2。6。3,最好不要动它。 接着我们就可以安装Rails了:geminstallrailsv6。1。1 安装成功后,刷新一下:rbenvrehash 然后查看版本号:railsvRails6。1。1 创建一个新项目:railsnewmyrails 进入项目目录:cdmyrails 启动服务:railss 千呼万唤始出来: 结语:作为同龄语言,如果说Java是闪现在天上的瑰丽,那么Ruby就是埋藏于地底的炽热,同样伟大但各擅胜场,而事实上同样作为脚本语言的Ruby更多的是在和Python对比,Python近几年在数据分析和深度学习领域的突飞猛进让Ruby难以望其项背,而Ruby在Mac系统中软件包管理层面却有着统治级的地位,就像你玩儿Mac就避免不了Homebrew,接触Homebrew就无法躲开Ruby。很多人唱衰Ruby,认为它过时了,而在Rubyist的心中则正相反,它太超前了,正是和M1芯片一样,是超越时代的产物,也许有一天,它会死亡,但绝不会是今天,最后,用十九世纪美国小说家赫尔曼梅尔维尔《白鲸》中的一节和诸君共勉: 有些人死在退潮里;有些人死在浅水滩里;有些人却死在洪水里。第一百三十五章,亚哈最后一次追击白鲸时,对阻拦他的大副斯达巴克说。