Open3
RailsでTrilogyを試す
はじめに
先日、GitHubから発表された、MySQL用のClientライブラリであるTrilogyをRailsに組み込んで色々試していきつつ、メモを残していきます
リポジトリはこちら
rails-trilogy-test
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
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