Open3

RailsでTrilogyを試す

SonHSonH

はじめに

先日、GitHubから発表された、MySQL用のClientライブラリであるTrilogyをRailsに組み込んで色々試していきつつ、メモを残していきます

リポジトリはこちら
rails-trilogy-test

SonHSonH

Railsで使用するには

公式からActive RecordのWrapperが出ているのでそれを使用する。

ただし、使用条件にActive Record のv7.1.0を要求される(2022年9月現在、Active Recoredはまだv7.0.4)ので、公式の推奨通り、rails gemのインストール元をmainブランチに指定する必要がある

gem "rails", git: 'https://github.com/rails/rails'
gem "activerecord-trilogy-adapter"

インストール後は、database.ymlのadapterでtrilogyを指定することで使用する

default: &default
  # adapter: mysql2
  adapter: trilogy 
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV["DATABASE_USERNAME"] %>
  password: <%= ENV["DATABASE_PASSWORD"] %>
  host: <%= ENV["DATABASE_HOST"] %>
  timeout: 5000
  encoding: utf8mb4
SonHSonH

MySQL8.0と接続

MySQL5.7の場合はデフォルトの設定で問題なく接続できたが、
MySQL8.0でデフォルトの認証となったcaching_sha2_passwordだと疎通できなかったので、
native_password方式で動かす必要があった。
関連ISSUE: https://github.com/github/trilogy/issues/26

mysql2 adapter では接続できたので、ここはデグレポイント

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
      TZ: "Asia/Tokyo"
    # trilogy's issue: https://github.com/github/trilogy/issues/26
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "13306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
      - ./db/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - backend