Rails M1 芯片 Mac 可以开发 Rails 吗?

canonpd · November 23, 2020 · Last by jasl replied at November 28, 2020 · 3108 hits

目前最想知道的情况是,

一、安装 Ruby 本身是否有问题? 二、安装 Rails 相关的各种依赖包是否有问题? 三、安装 Postgresql 是否有问题?

Docker 目前已知不可用,所不能考虑这条路。

有没有朋友买了?请告知下情况

等第二代

我没有 M1 的机器。

但是 ARM Linux 上编译 ruby 是没有问题的,M1 上的 macOS 的 LLVM 应该也是没有问题的。而且 macOS 还有自带的 ruby 解释器,四舍五入一下我倾向于认为没有什么问题。

我看了 homebrew 的说明,目前不支持 rbenv,不支持 ruby-build。

一、方案选择:

  1. 全套 arm64 编译
  2. 可以 arm64 的 arm 64,不可以的 Rosetta 2 虚拟 x86 跑
  3. 最坏的情况下,可以整套都用 Rosetta 2,不用担心

下面是 2020.11.23 23 点的测试情况:

二、arm64 配套支持情况:

  1. sqlite3 可
  2. node 15 最新版可,15 以下不行,15 以下可自行安装 x86_64 的 node
  3. pg 可

三、arm64 ruby 情况:

  1. brew 安装 rbenv / ruby-build 成功
  2. ruby-build 编译 2.7.2 通过,编译 2.6.6 不通过;系统自带 ruby 是苹果编译的 2.6.3。
  3. 下面用 ruby-build 的 2.7.2 测试
    1. gem 安装 rails 成功
    2. rails new 成功
    3. bin/rails 失败,报错 .rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/ffi-1.13.1/lib/ffi/types.rb:69:infind_type': unable to resolve type 'size_t' (TypeError)`
  4. 下面用系统自带的 2.6.3 测试
    1. gem 安装 rails 成功
    2. rails new 成功
    3. bin/rails 失败,报错 /Library/Ruby/Gems/2.6.0/gems/msgpack-1.3.3/lib/msgpack.rb:11:inrequire': dlopen(/Library/Ruby/Gems/2.6.0/gems/msgpack-1.3.3/lib/msgpack/msgpack.bundle, 0x0009): missing compatible arch in /Library/Ruby/Gems/2.6.0/gems/msgpack-1.3.3/lib/msgpack/msgpack.bundle - /Library/Ruby/Gems/2.6.0/gems/msgpack-1.3.3/lib/msgpack/msgpack.bundle (LoadError)`

四、结论

  1. ruby 目前还是推荐用 Rosetta 跑
  2. 配套基本都 OK,不行也是用 Rosetta 跑
Reply to kfll

请问性能有评测的那么猛么?

Reply to shiweifu

感官上挺好的

Reply to kfll

ffi 的那个问题已经有个 PR 了,原先没有 arm64-darwin 的 type 描述,实在不行可以上那个 fork 过的版本。

msgpack 这个怪怪的,因为 msgpack 有给瘦 gem,按道理 bundle 应该是本机打出来的,不知道怎么会缺 arch。感觉是苹果编译的解释器有点问题。

查到目前 python 上的相关包也是一堆问题。

这搞的没法开发了

10 Floor has deleted
Reply to kfll

@kfll ffi 的问题好像已经合并了。https://github.com/ffi/ffi/pull/843

You need to Sign in before reply, if you don't have an account, please Sign up first.