Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Mastodon on Ruby master
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
S.H.
November 23, 2024
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mastodon on Ruby master
第5回 Fediverse Linux Users Group 勉強会
S.H.
November 23, 2024
More Decks by S.H.
See All by S.H.
Termfront: Ruby標準ライブラリだけで作るFPS
gamelinks007
1
110
Ruby on Bare Metal
gamelinks007
0
120
Ecosystem on parse.y
gamelinks007
0
640
ゆるゆるMastodon 鯖缶生活
gamelinks007
0
820
1週間で作るActivityPubリレーサーバ
gamelinks007
0
190
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
650
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
120
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
820
ユーザーから見たLrama
gamelinks007
0
270
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
First, design no harm
axbom
PRO
2
1.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
630
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
390
Are puppies a ranking factor?
jonoalderson
2
3.8k
sira's awesome portfolio website redesign presentation
elsirapls
0
340
Into the Great Unknown - MozCon
thekraken
41
2.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Paper Plane
katiecoart
PRO
2
53k
Transcript
Mastodon on Ruby master S.H.
自己紹介 S.H. Rubyにたまにパッチを投げてる人 2017年ごろから鯖缶やってる人 最近ActivityPubリレーサーバを自作した
Rubyの コントリビューター
Mastodonの鯖缶
今日話すこと Ruby masterについて 実際の運用方法 バグの事例
Ruby masterについて
Ruby master とは? ruby/ruby リポジトリのmasterブランチのこと つまりRubyの開発版 rbenv などのバージョン管理ツールで使える 公式の rubylang/ruby
イメージ経由でも使 える
Ruby master を使うメリット 新機能をいち早く試せる パフォーマンス改善の恩恵を受けられる バグを踏める コントリビューションチャンスがある
Ruby master を使うデメリット バグを踏むことがある バグを踏んだときは自力でどうにかするしかな い デバッグとかつらい
利用状況や安定性 Shopify や GitHub でも利用されている コミッター(開発者)がそれらの企業にいるため バグも修正されやすい 基本的に安定している バグを踏んでも少し待てば修正されることが多 い
弊鯖での利用バージョン Ruby 3.4-dev(hash) jemalloc(アロケーションの改善) Universal Parser(パーサー周りの設定) YJIT(パフォーマンス改善) M:N Thread(軽量な並行処理の改善)
実際の運用方法
MastodonでRuby masterを使う RubyのバージョンやGemfile、CI の修正が必 要 デプロイ時にRuby masterをビルド それ以外は基本的に必要な変更はない
Rubyのバージョン変更 .ruby-versionをruby-dev に変更 - 3.3.6 + ruby-dev
Gemfileの変更 bundled_gem になった gem を追加 一部のgemは特定のコミットに変更 + gem 'rexml', '~>
3.2' - gem 'pg', '~> 1.5' + gem 'pg', github: 'ged/ruby-pg', ref: 'd072b218'
CIの修正 GitHub Actions にruby-devを追加 strategy: fail-fast: false matrix: ruby-version: -
'3.2' - '3.3' + - 'head'
デプロイ時のビルド rbenvを使ってRuby masterをビルド jemallocやYJITなどをオプションで有効化 ビルド時のログも出力し、バグや警告も確認
実際のビルドコマンド RUBY_CONFIGURE_OPTS=" \ --with-jemalloc \ --enable-yjit \ cppflags=-DUNIVERSAL_PARSER \ "
\ rbenv install ruby-dev --verbose
バグを踏んだ時 本番環境のログを確認 ローカル環境で再現手順を作製 パッチを投げる パッチが難しい場合は、Ruby 3.2 か 3.3へダ ウングレードして解消
バグの事例
RDocがビルドできない(1) Ruby masterでRDocがインストールできない Generating RDoc documentation Parsing sources... double free
or corruption (!prev) Aborted make: *** [uncommon.mk:676: rdoc] Error 134
RDocがビルドできない(2) どうもメモリ周りの問題らしい double free or corruption (!prev) Aborted make: ***
[uncommon.mk:676: rdoc] Error 134
調査(1) ログからメモリ周りの問題であることは判明 オプションのオンオフを試す
調査(2) -DUNIVERSAL_PARSER が有効な場合の み再現 直近の変更を確認し、各コミット毎にビルドを試 す
調査(3) [Feature #20257] Rearchitect Ripper これがマージされて以降に発生していることが分 かった
調査(4) RipperとRDocのコードを読み最小の再現コー ドを作成 require 'ripper' Ripper.new("./array.rb")
調査結果 RipperとPaserのメモリアロケーション関数が 同じ関数を使っている Universal Parserを有効化した際にCの translation unitで構造体のアロケーションさ れるサイズが異なっていた
パッチ作成(1) RipperとPaserそれぞれでアロケーションされ るサイズを調整 再現コードでエラーにならないことを確認
パッチ作成(2)
パッチ作成(3) レビューで「アロケーション周りの関数を共有し ているのをやめ、分離してはどうか?」とコメント を頂いた そのほうが後々も楽そうなので分離する方向で 対応し、無事マージされた
まとめ Ruby masterでMastodon を動かすことはで きる バグを踏むこともあるけどコントリビューション チャンスでもあるので楽しい