AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

docker(-compose) で MySQL を組み込む時の注意

久しぶりにゼロから docker-compose.yml 書いててハマったので。

常日頃から触ってないとわすれがちなの、トシを感じる。

ホスト側から MySQL CLI でコンテナ側の MySQL server へログインするとき

ホスト名は localhost を使用せずに 127.0.0.1 を指定する、 Docker の localhost はホストの解釈する世界とは違う。

❯ mysql -u MySQL_USER -pPASSWORD -h 127.0.0.1 -P PORT DATABASE_NAME

ports に 33060(:3306) を指定してはいけない

デフォルトで予約されているポート番号が 3306 なので、なんか追加して簡単に済ませがちだけど、フォワード先を 33060 にするとエラーになる。

MySQL said: Protocol mismatch; server version = 11, client version = 10

qiita.com

13306 とかにしておくのが (わかりやすさ優先なら) 無難そう。

- ports:
  13306:3306

該当のエラーは、公式の一覧見てもよくわからねえのだった。 (5.7 の一覧しか見つからなかった)

dev.mysql.com

Rails の一ヶ月

ビジネスロジックでの判定で、いわゆる「一ヶ月前」という実装を愚直に 1.month.ago (ago(1.month)) などとした場合。

「これは当日を含むのか」とか「一ヶ月って30日?」「例えば閏年で 1/30 から一ヶ月後って 2/29 と 3/1 どっち? 一ヶ月前になると逆パターンだけどどう?」みたいな質問をされて、「前者はそら当日含むやろ!」とは思ったんだけど、後者は「確かに一ヶ月の長さって固定じゃないもんな」と気付いて、真面目に調べるなどしてみた。

結論

日数ベースではなく、ちゃんと「暦」として解釈して一ヶ月後になる。

blog.aiandrox.com

なので 2/29 の ago(1.month) だと 1/31 になるし、1/31 のsince(1.month) だと 2/28 (or 29) になる。

# 2024/1/31 の一ヶ月後 => 2024/2/29
[1] pry(main)> Time.parse('2024-1-31').since(1.month)
2024-02-29 00:00:00 +0900
# 2024/1/30 の一ヶ月後 => 2024/2/29
[2] pry(main)> Time.parse('2024-1-30').since(1.month)
2024-02-29 00:00:00 +0900
# 2024/1/29 の一ヶ月後 => 2024/2/29
[3] pry(main)> Time.parse('2024-1-29').since(1.month)
2024-02-29 00:00:00 +0900
# 2024/1/28 の一ヶ月後 => 2024/2/28
[4] pry(main)> Time.parse('2024-1-28').since(1.month)
2024-02-28 00:00:00 +0900
# 2024/2/29 の一ヶ月前 => 2024/1/29
[5] pry(main)> Time.parse('2024-2-29').ago(1.month)
2024-01-29 00:00:00 +0900
# 2024/2/28 の一ヶ月前 => 2024/1/28
[6] pry(main)> Time.parse('2024-2-28').ago(1.month)
2024-01-28 00:00:00 +0900
# 2024/3/31 の一ヶ月前 => 2024/2/29
[7] pry(main)> Time.parse('2024-3-31').ago(1.month)
2024-02-29 00:00:00 +0900

なぜそうなっているか

qiita.com

なるほどー、 ActiveRecord かしこいなあ!

という、何気なく保証される一ヶ月に対する学びのメモであった。

Cookie の語源

そういや確かに「クッk−はなんで Cookie なんだ?」という疑問あったので調べてみたら、ロッテがページを公開していた。

www.lotte.co.jp

同じような仕組みを持っていたUNIXのプログラムが、「Magic Cookie」と呼ばれており、この名前から来た説。
データの保存用として使われるものなので、同じ保存の意味を持つ『保存食=クッキー』から来た説。
毎回違うメッセージを表示することから、中華料理屋さんで食後に出てくる、おみくじ入りクッキーの「fortune cookie(フォーチュン・クッキー)」を語源とする説。
テレビ番組『セサミストリート』のクッキーモンスター(ぐるぐる目に青いふわふわのキャラクター)が、いつもクッキーを食べているように、ウェブサーバーに情報が食べられるという意味でつけられたとする説。
単に「食べられる」という意味で名付けられたとする説。

はえーなるほど、由来はわかってないんすねえ。

NginxProxyManager で独自証明書を持ち込みたい

自社ドメインで管理・運用している所に外部からドメインごと設定を持ち込みたい、みたいな要件が出てきて調べていた。

今のところ管理画面から持ち込む方法はなくて、 Docker なら volumeMount などでディレクトリ指定して取り込んだ上で、ProxyHost 追加時に Nginx のコンフィグを毎回書くしかない? よくわからん。

使ってて便利なのでもうちょっと調べて該当する機能がなかったら……なかったらどうしよう (どうしよう)。

github.com

unicorn -> pitchfork

railsatscale.com

へー、と思いながら見ていた。

Pitchfork

JIT 有効にした環境なら Unicorn よりよさそうな風情は感じるけど、まだ 0.9.0 らしいので GA なりメジャーバージョンに到達するまで様子を見ましょう。

一応「Puma (thread 形式のアプリケーションサーバ) がわからん!」という声が今やってるプロジェクトでアサインした複数人から出ていて、要は詰まったらプロセスぶち殺せば良いし、足りなかったらプロセス増やせば良いモデルの方が直感的、という話だった。

worker も子プロセスだしいっしょじゃね? と思っていたのだけど、「プロセスの下に thread が居て、1プロセス1コネクションじゃないからわからん!」という事らしい。 まあそれはそう。

ほどほどにやっていく。

Falcon

github.com

ちょっと期待していたんだけど、動きがあんまりなくて「そっかー」となっている。