感谢大家的热心帮助。
很遗憾,我目前还没能顺利在本地安装好 Rails,但过程中也学习和了解了很多,现将我的进展和问题整理于下,方便后续朋友了解或协助解决,再次感谢。
执行 `brew install ruby` 成功安装 Ruby 3.3.1,然后执行 `gem install rails -V` 安装 Rails 遇到问题
命令执行后最终会一直 hang 在 creating Makefile 这一步
具体的终端输出请参考: https://gist.github.com/ttys000/72d535a87d966b0383b7b147213b1cab
似乎是安装 `websocket-driver` 这个 gem 失败了
使用 `gem install websocket-driver --debug` 可以看到报了很多 `No such file or directory` 之类的异常
我尝试着用 Homebrew 切换了几个不同的 3.x Ruby 版本,还是会报同样的异常信息
具体日志请参考: https://gist.github.com/ttys000/badd1459f10cc9a033b8826b923ed997
asdf
安装 Ruby 失败执行 `asdf install ruby 3.3.1` 安装 Ruby
遇到了 `unmarshal message: unexpected end of JSON input` 错误
具体日志请参考 https://gist.github.com/ttys000/eb02d20eb0373e68d1ef00376c4486a3
如果你遇到问题需要详细了解 Ruby 在 macOS M1 上的安装,那么请阅读本节。我的操作系统版本是 macOS Sonoma 14.5
。
强烈推荐使用 asdf
这个版本管理工具,它底层也是使用 ruby-build 进行构建的,但它输出了更完整的日志,方便 debug。
用法非常简单,请查看
asdf 官网:https://asdf-vm.com/guide/getting-started.html
GoRails 的教程:https://gorails.com/setup/macos/14-sonoma#ruby
无论是 rbenv 还是 asdf,这些工具本质上都是从源码构建出 Ruby 的,所以对本地构建环境有一定的依赖和要求,主要有:
readline
, libyaml
, gmp
, openssl@3(only for Ruby 3.x)
这些依赖库都可以通过 Homebrew 直接安装。如果遇到 openssl 或者 readline 没有找到正确依赖的问题(比如可能你本地有多个 openssl 版本),可以通过配置环境变量的方式解决。
export RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl@3)"
这些库依赖都可以通过在环境变量中配置指定 flag 的方式解决,仔细看构建过程中的终端输出会有以下类似的内容:
-> ./configure "--prefix=$HOME/.asdf/installs/ruby/3.2.4" --enable-shared --with-readline-dir=/opt/homebrew/opt/readline --with-libyaml-dir=/opt/homebrew/opt/libyaml --with-gmp-dir=/opt/homebrew/opt/gmp --with-ext=openssl,psych,+ --with-openssl-dir=/opt/homebrew/opt/openssl@3
这显示了当前构建使用的依赖库具体位置(如果没有看到这类信息,请尝试加上 verbose 选项,-v / --verbose 等,具体可以 --help 查看)。
rustc
没错,rustc 是 YJIT 必要的依赖,不装就不会构建 YJIT 功能。rust 相关工具的安装非常简单,这里就不赘述了。
确保你本地的 Command Line Tool 安装正确,执行以下命令并检查输出:
xcode-select -p
/Applications/Xcode.app/Contents/Developer
有问题可以通过使用 xcode-select
命令的选项 --install
安装或 -r, --reset
重置为默认路径。
构建日志中可能会显示 llvm 相关的错误,比如:
configure: error: something wrong with LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
这是因为 Ruby 在构建的过程中需要用到 clang 这个 C 编译器前端工具,如果本地安装并配置了 llvm 可能会导致构建失败。
请确保使用 Apple clang:
clang --version
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
并请检查环境变量 LDFLAGS
, CFLAGS
, CPPFLAGS
中是否含有 llvm 相关的 path,如果有请去掉试试。
以上就是我遇到并解决过的问题,感谢社区的帮助。
好久没关注 Ruby on Rails 了,前些天看了 Rails 7 的前端 import-map 等前端方案,感慨这个框架居然不仅一直在更新,而且非常与时俱进,于是重新燃起兴趣。
结果花了一上午的时间完成了「从想玩」到「放弃」
没想到都 2024 年了,在 macOS M1 安装 Rails 如此困难,我的系统版本是 macOS Sonoma 14.5
我尝试了:
等,但都失败了。
然后尝试找一些第三方的 all in one installer,比如 railsinstaller.org 仅支持到 macOS 10.8
更离谱的是,我居然发现了这个 rubyonmac.dev,99 刀就为了安装好 Ruby 和 Rails?难以置信。