阅读视图

发现新文章,点击刷新页面。

如何在 M1 mac 上安装 MySQL2 Gem

在 M1 的 mac 上安装 mysql2 这个 gem 的时候,经常会遇到如下的报错:

1 warning generated.
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: warning: -multiply_defined is obsolete
ld: warning: ignoring duplicate libraries: '-lruby.3.2'
<strong>ld: library 'zstd' not found
</strong>clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

根据提示,我们可以看到是 zstd 这个依赖找不到导致的编译失败。这是因为 mysql2 是一个 Native Gem,依赖了大量的系统组件,如果我们没有对应的系统组件,就无法找到。

但实际上在我的系统中已经安装了 zstd,只是在 mysql2 的构建过程中找不到。

d2b5ca33bd970f64a6301fa75ae2eb22 3

要解决这个问题有几个思路:

  1. 在构建时能找到 zstd ;
  2. 在构建时指定 zstd 的位置。

这里我选择第二种方式:

gem install mysql2 -- --with-mysql-config=$(brew --prefix mysql)/bin/mysql_config --with-ldflags="-L$(brew --prefix zstd)/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include

通过 -- -with-mysql-config 的方式,可以在安装时指定构建的参数,从而实现让 gem 构建时使用我们设置的路径,从而完成 gem 的安装。

d2b5ca33bd970f64a6301fa75ae2eb22 4

如何自定义 Docked?

我在之前的文章 使用 Docked Rails CLI 简化 Rails 的开发 中介绍了 Ruby on Rails 的 Docked 程序,并提供了一个我自己的定制版本。

这里来和大家说一下怎么自定义 Docked 镜像,从而构建一个适合你自己的镜像。

Fork Docked 项目

At first ,你需要 Fork Rails 官方的项目

https://github.com/rails/docked

Fork 项目到你自己的名下后,你可以修改一下他的名字,改成适合你自己习惯的名字(比如我就改成 Runs 了,Docked 对我来说太容易打成 Docker 了)。

修改 Dockerfile

Docked 最核心的其实就是 Dockerfile ,你可以修改你 Fork 来的项目,并在 Dockerfile 当中添加必要的依赖,引入新的资料等。

比如,https://github.com/bestony/runs/commit/d930a5d6fc389cb6fa8e9f7c41947d01b000da95这个 Commit 就是为了在 Dockerfile 当中添加 PGSQL 的配置,以实现在使用 rails new 命令时,可以选用 PGSQL as DB Backend。

修改 Ruby 版本

可参考:https://github.com/bestony/runs/commit/31fabe5f914d931834b0e12797b14d76bf56d162

修改 Node 版本

可参考:https://github.com/bestony/runs/commit/5969cc4ee5c0bf8503ebdab5664f365b6719843e

修改编译脚本,上传镜像

修改完成 Dockerfile 后,接下来你需要修改 Docker镜像产物,以便于你自己在实际使用过程中,直接使用你自己的 Docker 镜像。

修改 https://github.com/bestony/runs/blob/160fe165db7abecc3229be417b15473dcd3aec9f/.github/workflows/docker-publish.yml#L41 的 tags 为你自己的,格式为 ghcr.io/{你的 ID}/{你的仓库名}

修改好之后,只需要提交 Commit ,等待 Github Action 的自动构建即可。

修改 Readme

镜像构建结束,你只需要修改 Readme 中的安装配置命令,这样在后续使用时就不用自己再修改了。重点修改的内容包括 ailas、镜像名以及底部的启动命令。

d2b5ca33bd970f64a6301fa75ae2eb22

总结

通过对 Docked 的简单修改,可以实现快速构建一个属于你自己的开发环境命令,帮你优化自己的工作流。

使用 Docked Rails CLI 简化 Rails 的开发

在开发 RoR 的时候,经常需要配置本地的开发环境。但如果你需要在一些云端开发环境(比如 Github Codespaces)中配置你的开发环境时,就会变得比较麻烦。

但得益于 Docker,我们可以直接使用 Docker 镜像来完成我们的开发环境。

Ruby 官方提供了 Docked 来帮助我们完成这个环境的构建。

配置

假设你已经完成了 Docker 的安装,接下来你只需要做如下操作,来配置 Docked Rails Cli

docker volume create ruby-bundle-cache
alias docked='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 ghcr.io/rails/cli'

为了方便你的使用,你还可以将上述的输入放在 .bash_rc.bash_profile 当中。

使用

接下来,你只需要使用 docked 你要执行的命令 来执行各种命令,比如官方给出的这样的 Sample。

docked rails new weblog
cd weblog
docked rails generate scaffold post title:string body:text
docked rails db:migrate
docked rails server

updates in 2023.12.19

由于官方默认的 docked 没有 PGSQL 的支持,所以我自己 Fork 了一个版本,做了一些更新。

具体可以见 https://github.com/bestony/runs

❌