1731869652
2024-11-12 13:51:00
最新の Web アプリを展開することは、高速かつ安全でありながら簡単に更新できるために必要なすべての条件を備えているため、非常に困難になっているため、多くの開発者は PaaS (サービスとしてのプラットフォーム) なしでそれを行う勇気がありません。しかし、それはおかしいです。導入をフレンドリーで使いやすくするためだけに、基本的なコンピューティングに何桁も多くの金額を支払う必要はありません。これはオープンソースの仕事であり、Rails 8 はそれを解決する準備ができています。したがって、ベータ版リリースの成功といくつかのリリース候補を経て、Rails 8.0 の最終バージョンの準備ができたことを大変うれしく思います。
ボックス内の主要な新機能はすべて次のとおりです。
カマル2 + スラスターを入力してください
Rails 8 にはあらかじめ構成されています カマル 2 アプリケーションをどこにでもデプロイできます。クラウド VM であっても、独自のハードウェアであっても。 Kamal は、新しい Linux ボックスを取得し、「kamal setup」コマンドを 1 つ実行するだけで、それをアプリケーション サーバーまたはアクセサリ サーバーに変えます。必要なのは、SSH キーがデポジットされた一連のサーバーの IP アドレスだけで、2 分以内に本番環境に入る準備が整います。
Rails にはすでに非常に効率的で調整された機能が備わっているため、Kamal はこれを非常に簡単に行うことができます。 Dockerfile アプリケーションをすぐに運用可能なコンテナー イメージに変換します。持参する必要があるのは、イメージを保存するための Docker Hub や GitHub などの独自のコンテナー レジストリ アカウントだけです。
Rails 8 では、この Dockerfile がアップグレードされ、 という新しいプロキシが組み込まれました。 スラスター、Puma Web サーバーの前に配置され、X-Sendfile アクセラレーション、アセット キャッシュ、およびアセット圧縮を提供します。これは、Nginx やその他の Web サーバーを前面に配置する必要がないことを意味します。デフォルトの Rails コンテナは、インターネットからのトラフィックをすぐに受け入れる準備ができています。
Kamal 2 にはプロキシも含まれています。今回は、と呼ばれる特注のユニットです。 カマルプロキシ 発売時に使用されていた汎用の Traefik オプションを置き換えます。このプロキシは、複雑な構成を必要とせずに、超高速のゼロダウンタイム展開、Let’s Encrypt による自動 SSL 証明書、単一サーバー上の複数のアプリケーションのサポートを提供します。
シークレットを処理するための改訂された戦略 (1password、Bitwarden、LastPass の組み込み統合を特徴とする) と、リモート Rails コンソール セッションを開始するための「kamal console」などのコマンドを取得するための新しいエイリアス機能とともに、処理のための完全なパッケージを提供します。デプロイメントだけでなく、実稼働環境でのアプリケーションの操作も含めます。
Kamal 2 は Donal McBreen が主導し、Kamal Proxy + Thruster は Kevin McConnell が作成しました。 37信号。
依存関係の確実な削減
Rails のデプロイを容易にする一環として、稼働に必要なアクセサリ サービスの数を減らすことが挙げられます。以前は、Rails がジョブ、キャッシュ、WebSocket などのすべての機能を最大限に活用するには、Redis に加えて MySQL または PostgreSQL のいずれかが必要でした。 Solid Cable、Solid Cache、Solid Queue という、データベースをサポートする新しいアダプターの 3 つのおかげで、これらすべてを SQLite で実行できるようになりました。
これらのアダプターはすべて同じ前提に基づいて作成されています。つまり、ディスクが十分に高速化されているため、多くのタスクに RAM は必要ありません。これにより、古き良き回転錆よりも桁違いに高速な SSD および NVMe ドライブの簡素化のメリットを享受できるようになります。
ソリッドケーブル
ソリッドケーブル これにより、Redis が pubsub サーバーとして機能し、アプリケーションからさまざまなプロセスに接続されているクライアントに WebSocket メッセージを中継する必要がなくなります。高速ポーリングを使用しますが、SQLite 上の同じサーバー経由で実行した場合でも、Redis とほぼ同じくらい高速です。ほとんどのアプリケーションにとって十分な速度を超えています。おまけに、Solid Cable は送信されたメッセージをデフォルトでデータベースに 1 日保持するため、厄介なライブ アップデートの問題のデバッグが容易になります。
Solid Cable は、Nick Pezza によって作成されました。 働いている 働いていない。
ソリッドキャッシュ
ソリッドキャッシュ 特に HTML フラグメント キャッシュを保存するために Redis または Memcached が必要なくなります。アクセサリ サービスの依存関係を取り除くことに加えて、RAM ストレージではなくディスク ストレージを使用することで、キャッシュを大幅に大規模かつ安価にすることもできます。これは、キャッシュの存続期間が長くなり、95 パーセンタイルまたは 99 パーセンタイルのプランクからさらに多くのリクエストをカバーできることを意味します。さらに、このキャッシュは暗号化することができます そして 明示的な保持制限 (30 日や 60 日など) によって管理されます。最新のプライバシー ポリシーと期待に応えやすくなります。
Solid Cache は Basecamp で 1 年以上運用されており、10 テラバイトのデータを保存し、60 日間の完全な保持期間を可能にし、導入後 P95 のレンダリング時間を半分に短縮しました。
Solid Cache は、37signals の Donal McBreen によって作成されました。
ソリッドキュー
ソリッドキュー これにより、ほとんどの人にとって、Redis だけでなく、Resque、Delayed Job、Sidekiq などの別個のジョブ実行フレームワークの必要性もなくなりました。高性能のインストールのために、新しいものに基づいて構築されています。 FOR UPDATE SKIP LOCKED このメカニズムは PostgreSQL 9.5 で初めて導入されましたが、現在は MySQL 8.0 以降でも利用可能です。より控えめなニーズの場合は、SQLite とも連携するため、本番環境での作業をすぐに確認して最初の HELLO WORLD ドーパミン ヒットを得る、依存関係のないパスとして最適です。
Solid Queue は、単一サーバー インストールのデフォルトである puma プラグインとして実行することも、新しいプラグインを使用して実行することもできます。 bin/jobs 専用のディスパッチャを起動するコマンド。オーダーメイドのパフォーマンス調整に従って、専用のキューを処理する複数のディスパッチャを実行することが可能です。すべて柔軟な構成スキームを備えており、すぐに調整する必要はなく、必要に応じてすべてのダイヤルを提供します。
最新のジョブ キュー システムに必要な機能がほぼすべて備わっています。堅牢な同時実行制御、失敗の再試行とアラート、定期的なジョブのスケジュール設定などが含まれます。 HEY では、6 (!) もの異なる Resque gem を 1 つの統合ソリューションとして置き換えました。
Solid Queue は、過去 18 か月にわたって実際の運用環境のプレッシャーの中で細心の注意を払って開発され、現在では HEY だけで 37 シグナルで 1 日あたり 2,000 万のジョブを実行しています。
Solid Queue は、37signals の Rosa Gutiérrez によって作成されました。
SQLite を本番環境に向けて準備する
SQLite が Action Cable、Rails.cache、Active Job を利用できるようにする Solid アダプターの 3 つの機能に加えて、SQLite アダプターと Ruby ドライバーを Rails 8 での実際の運用に適したものにするために多くの作業が行われました。
37signals では、実稼働環境で SQLite を使用する成長を続けるアプリ スイートを構築しています。 一度。現在、両方とも何千ものインストールが行われています キャンプファイヤー そして 書き込みブック すべて SQLite を実行する実際の環境で実行されています。これは、Rails (および Ruby) がファイルベースのデータベースを可能な限り適切に動作させることを保証するという、現実世界における多くのプレッシャーを意味します。 WAL や IMMEDIATE モードなどの適切なデフォルトを使用します。 Stephen Margheim 氏に心より感謝いたします。 このような多数の改善 そしてマイク・ダレッシオ 直前の SQLite ファイル破損問題を解決する Rubyドライバーで。
スプロケットとプロペラシャフトの交換
ただし、Rails 8 は、より優れたデプロイメント ストーリーとデータベースをサポートするアダプターだけを目的としているわけではありません。また、Propshaft を新しいデフォルト アセット パイプラインにします。 Propshaft は、Rails 7 のデフォルト パスとして #NOBUILD に焦点を当てる (そして、より複雑な JavaScript セットアップを bun/esbuild/vite/etc にオフロードする) という使命からの成果です。として 新しい資産パイプライン これは、2009 年に誕生した古い Sprockets システムを置き換えるものです。今日知られている JavaScript トランスパイラーやビルド パイプラインが存在する前の時代です。そして、優れた JavaScript 実装を備え、マップをインポートし、HTTP/2 のおかげで多くの小さなファイルからの制約がないブラウザーを想像できるずっとずっと前に。
これは、時々新しい紙を取り出して、よく知っている問題をもう一度第一原理から検討する必要があることを示す好例です。そして判明したのは、 私たちの新しい #NOBUILD ワールドでの場合、アセット パイプラインは主に 2 つのことだけを実行する必要があります。アセットのロード パスを提供し、遠い将来の有効期限に備えてダイジェストをスタンプすることです。基本的にはそれだけです。 Sprockets はそれ以外にも 100 万もの活動を行ってきましたが、その多くはとうの昔に人気がなくなっていた方法で、修復に協力しようとする、または協力できる貢献者がほとんどいない荒廃した状態からのものでした。
したがって、Sprockets の 15 年間のサービスに感謝しますが、Rails のアセット パイプラインの将来は Propshaft と呼ばれます。現在、これはすべての Rails 8 アプリケーションのデフォルトになっていますが、既存のアプリケーションについては引き続き Sprockets をサポートします。
プロップシャフトは、37signals の David Heinemeier Hansson と、Breno Gazzola によって作成されました。 フェスタラボ。
認証の基本を生成する
最後に、本番環境への移行を容易にするということは、セキュリティを簡単に確保できるようにする必要があることも意味します。 Rails は、その容易さを実現するために、優れた認証システムの主要コンポーネントの高レベルの抽象化を長年にわたって組み立ててきました。私たちは持っていました has_secure_password Rails 5 以来ですが、最近導入されたものでもあります generates_token_for :password_reset とともに authenticate_by Rails 7.1では。現在、Rails 8 では、すべての要素を完全な認証システム ジェネレーターにまとめています。これは、セッションベースでパスワードのリセットが可能で、メタデータ追跡の認証システムの優れた出発点を作成します。
ただ走ってください bin/rails generate authentication そして、基本的なモデルが得られます。 Session そして User、一緒に PasswordsMailer、 SessionsController、そして Authentication 懸念。ユーザーが用意する必要があるのは、ユーザーのサインアップ フローだけです (通常、これらは各アプリケーションに合わせてカスタマイズされているため)。これらの基本が提供されているので、独自の認証セットアップを実行することを恐れる必要はありません (あるいは、ベンダーに費用を支払うことも禁じられています!)。
そしてその他すべて
Rails 8はわずか数カ月後に廃止される レール 7.2しかし、上で紹介したこれらすべての驚くべき新しいツールに加えて、豊富な修正と改善も含まれています。 Rails は、現在私たちが行っていることよりも、すべてのシリンダーに対してより強力に発火したことはありません。このフレームワークに関わるのは信じられないほど素晴らしい時間であり、初めて電車に乗る素晴らしい瞬間です。 #NOBUILD や #NOPAAS に興味がある場合でも、単純に複雑さ全体を圧縮するという使命に惹かれている場合でも、生産性と同じくらい美しいコードを重視する情熱的なビルダーのコミュニティにすぐに慣れることができます。
#Ruby #Rails #Rails #PaaS #は不要