開始以来、GitHub.com は Ruby on Rails のモノリスでした。 現在、ユーティリティには約 200 万のコード トレースがあり、1,000 人以上のエンジニアが日々協力しています。 私たちは 1 日に 20 回も絶え間なくデプロイしていますが、ほぼ 1 週間に 1 回のデプロイが Rails のアップグレードです。
Rails を毎週アップグレードしています
毎週月曜日に スケジュールされた GitHub Action ワークフロー は、自動化された pull put an yell to をトリガーし、Rails バージョンをその日の Rails エッセンシャル ブランチの最新のコミットにバンプします。 すべてのビルドは、この最新バージョンの Rails で高速化されています。 ビルドの総数が決まったら、変更を確認し、翌日に発送します。 月曜日にアップグレードを開始する必要がありますが、すでにオープン プルを取得しており、この Rails アップグレードが提案する変更と完成した作成を関連付けることに興奮しています。
この課題は非常に難しい約 1 年前に Rails のアップグレードを最も簡単に行った方法から。 以前は、Rails のカスタム フォークから最新の安定版リリースへの移行に数か月を費やしました。その後、2 つの Gemfile を維持して、今後のリリースに気を配るようにしました。 現在、アップグレードは 1 週間以内に費やされます。 この 2018 のウェブログ投稿 で、この課題についてさらに詳しく知る必要があります。 Rails のリリースが正式にリリースされる前に、すべての Rails リリースが本番環境で実行されていることを確認するために、近隣の方々と緊密に協力しています。 :
- 私たち最新バージョンの Rails を提供することで、GitHub のビルダーに私たちのインストゥルメント の最も簡単なバージョンを提供してください。 これにより、お客様は、データベース接続処理の改善、レンダリングに関する迅速な取得、Rails で毎日行われている信じられないほどの作業など、最新の機能強化全体のモチベーションを費やすことができます。
- ほぼすべてのRailsパッチを削除しました 。 私たちは Rails の最新バージョンで実行しているため、Rails にパッチを適用してトレードを検討する代わりに、ビルダーは Rails 自体へのパッチを提案することができます )
- Engaged on Rails はこれまで以上に簡単になりました
- 乗組員に分けてあげましょう! 次のリリースでマウントできる Rails の 1 つのことをたまたま見つけたので、Rails の 1 つのことに取り組み、翌週にそれを検索する必要があることをスタッフに伝えるのとは異なります!
- より最新の依存関係を宣言することで、セキュリティが向上します姿勢。 すでに毎週のアップグレードを構成しているため、セキュリティ アドバイザリが適用される可能性がある場合のアップグレードも同様に古くなり、追加の作業は必要ありません。
- 「好都合な」移行はないようです
- 。 すべての Rails のアップグレードには、最も簡単な変更の小さな優先事項が含まれているため、非互換性がある場合は、より簡単に認識して掘り下げることができます。 トリッキーなアップグレードによる 最悪のコンポーネントは、未知の領域からの予期しない変更です。 これらのコンポーネントは、このアップグレード ダイアグラムによっておそらくさらに軽減される可能性があります。
- エッセンシャル ブランチでバグを見つけて支援を提供すること は、エンジニアリング チームを強化し、ビルダーがスキルと信念を深めるのに役立ちます。
Rubyの繰り返しテスト
当然のことながら、Ruby のアップグレードについては同じ割り当てが行われています。 2022 年 2 月、Ruby 3.1 にアップグレードした直後に、並列作成で 3.2-alpha から Ruby sha の構築とチェックアウトを開始しました。 GitHub Rails ユーティリティに対して CI を実行すると、2 つのバージョンのビルドが高速化されます。1 つの create は、本番環境で実行している Ruby バージョンを実行し、もう 1 つは、毎週変更される Ruby の最新の変更を含む最新の Ruby コミットを実行します。 .
私たちは取引ごとに Ruby を作成しますが、GitHub は番号付きの Ruby バージョンを本番環境に出荷するのが最も簡単です。 ビルドは、今後の Ruby バージョンとの互換性を保護し、今後の Ruby の変更についての洞察を提供してくれます。 Ruby 3.2 の旧式のクリスマス リリースとまったく同じものでしたが、本番トラフィックの一部で Ruby のリリース候補を想定する立場にあり、Ruby の乗組員に私たちが見た変更についての洞察を提供しました。 例として、キー フレーズの引数の処理 この割り当ての結果、Ruby 3.2 のリリースの前にマウントされるように変更されました。 さらに、
to_str および #to_iを利用
。 合計時間をアップグレードするため、これらのコンポーネントを特定して解決し、同一の古い適用に変更しました。
Ruby のこの毎週のアップグレード課題により、モノリスを Ruby 3.1 から Ruby 3.2 内部にアップグレードすることができました。発売月。 少なくとも、本番環境での検証と高速化はすでに完了しています。 この時点で、これは これまでに完了した最速の Ruby アップグレード に変更されました。 Ruby 3.2.1 のリリースに伴い、このドキュメントは破棄されました。これは、リリース日 に 採用されました。 .
このアップグレードの割り当ては、Ruby コア クルーとのコラボレーションにとって非常に貴重であることが証明されました。 これらのビルドを取得することの大きな側面は、痛みのテストをせずにハングアップした Ruby の変更を事前にプロファイルし、それらをアップストリームに推奨することができるということです。 これにより、ハング ユーティリティでリグレッションを呼び出すことがより簡単になり、本番環境への変更の影響をより適切に認識できるようになる可能性があります。
- エッセンシャル ブランチでバグを見つけて支援を提供すること は、エンジニアリング チームを強化し、ビルダーがスキルと信念を深めるのに役立ちます。
- Engaged on Rails はこれまで以上に簡単になりました
私も作曲しなきゃいけないの?
Ruby と Rails の頻繁なアップグレードを作成できるのは、GitHub でのエンジニアリングの成熟度によるものです。 毎週 Rails のアップグレードを行うには、多くの膨大なエンジニアがそれを保護し、強化するために取り組んでいる完全なテスト スイートが必要です。 さらに、最新のロールアウト展開と一緒に巨大なテスト環境を用意することで、自己認識を構築します。 私たちのテスト スイートは懸念事項を把握しているように見えますが、そうでない場合は、可能性に到達する前にデプロイの最中にそれを把握できると確信しています.
これらのツールをさらに所有し、毎週 Rails をアップグレードし、最新の Ruby の使用をテストする必要がある場合。 GitHub は、そのおかげでより優れた Rails アプリであり、私が実際に満足している私の乗組員の仕事を可能にしました. Rails Conf 2022基調講演:
実際には、より多くの企業がフレームワークをユーティリティの拡張として扱う場合、回復力と安定性の向上につながる可能性があります。 Rails で資金を調達することで、ユーティリティの負担で基盤が崩壊することはなくなります。 それをユーティリティの重要でない部分として扱うのは間違いであり、多くのリーダーがこのエラーを回避しています.これまで以上にフィット。 GitHub は、多数の代替企業とともに、Ruby と Rails の利点を強化し続けています。 繰り返しアップグレードし、フレームワークに投資することは、GitHub の Ruby アーキテクチャ クルーで作成する作業の主要な部分です。 私たちは常に Ruby の周辺に感謝しており、私たちのユーティリティとインスツルメントを同様に改善するモードで支援できることに満足しています.
GitHub インサイダーに登録する
ソリューション、テクニカル ガイド、および GitHub から提供される最新の製品拡張機能をカバーするビルダー向けのニュースレター。