GraphQL Ruby。パフォーマンスについては?
GraphQLには、他のテクノロジーと同様に問題があり、そのいくつかはアーキテクチャに直接起因し、いくつかは他のアプリケーションで見られるものと同じである。しかし、その解決策は...
Rubyのエコシステムにおけるラックの役割について専門家から学び、Rubyのスキルをアップさせましょう。
と協力しながら ルビー ウェブフレームワーク it’s common to take things for granted. We know the framework will handle the HTTP requests and execute the middleware logic for us. As we get more curious we start wondering what is behind the scenes, there’s where we start hearing about Rack.
について プロジェクト は、「モジュール式のRubyウェブ・サーバー・インターフェイス」と説明されている。Rackは、ウェブサーバー、ウェブフレームワーク、ミドルウェアのAPIを統合し、ウェブアプリケーションを作成するためのインターフェースである。

上の図にあるように、Rackはウェブアプリケーションとアプリケーションサーバーの中間的な役割を果たし、HTTPリクエストを最もシンプルな
可能な限り。
Rackアプリケーションは、(クラスではなく)Rubyオブジェクトであり、次のようなレスポンスに応答します。 コール.引数を1つだけ取ります。 環境 の凍結されていない配列を返す。
の3つである:
そして ボディ.
ラック・アプリケーションの詳細仕様については、こちらをご覧ください。 これ.
require 'rack'
クラス RackApp
def call(env)
ステータス = 200
headers = { 'Content-Type' => 'text/html' }.
body = ['<h1>マイラックアプリ<h1>']
[ステータス、ヘッダー、ボディ]
終了
終わり
ハンドラはWebサーバとRackを接続します。Rack には Thin、WEBrick、FastCGI、CGI、SCGI、LiteSpeed 用のハンドラがあります。Rack をサポートする各アプリケーションサーバーは
ハンドラは通常、接続を作成するハンドラを提供します(Pumaは独自のハンドラを持ちます)。 MyHandler.run(myapp).2つ目のオプションのハッシュを渡せば、サーバー固有の設定を含めることができる。
シン・アプリケーション・サーバーの使用
Rack::Handler::Thin.run(app)
コンフィギュレーションを追加するデフォルトのファイルは コンフィグ で実行できる。 ラックアップ コマンドをコンソールに入力する。
Rackでは、ミドルウェア・アプリケーション(メインのウェブ・アプリケーションとアプリケーション・サーバーの間にあるアプリケーション)を作成することができます。これらのミドルウェア・アプリケーションは連結され、順次実行される。
ラック・ミドルウェアは、以下のすべての仕様を実装しなければならない。 ラック・アプリケーション そして、以下の点を満たすこと:
クラス RackMiddleware
def initialize(app)
app = app
end
def call(env)
app.call(env)
end
end
これで基本がわかったので、Rackミドルウェアを使って最初のRackアプリケーションを作成し、Puma(アプリケーション・サーバー)を使って実行する準備が整った。
を持っていることを確認してください。 ラック 宝石と プーマ gemをインストールした。
gem rackをインストールする
gem pumaをインストールする
まず コンフィグ を使用する。
Rack::Builder DSL を使用してアプリケーションを実行し、ミドルウェアを追加します。
その中で コンフィグ ファイルで定義したシンプルな Rack アプリケーションを追加します。
前のセクション
# config.ru
クラス RackApp
def call(env)
ステータス = 200
headers = { 'Content-Type' => 'text/html' }.
body = ['<h1>マイラックアプリ<h1>']
[ステータス、ヘッダー、ボディ]
終了
終わり
ここでは、シンプルなミドルウェアにちょっとした変更を加え、実行後にサーバー・ソフトウェアをHTMLボディに追加するようにする。
# config.ru
クラス RackMiddleware
def initialize(app)
app = app
終了
def call(env)
ステータス、ヘッダー、ボディ = @app.call(env)
body << env['SERVER_SOFTWARE'].
[ステータス、ヘッダー、ボディ]
終了
終了
最後のステップとして、サーバーを動かしてアプリケーションが動いているのを確認しよう。私たちの コンフィグ ファイルは次のようになる:
# config.ru
クラス RackApp
def call(env)
ステータス = 200
headers = { 'Content-Type' => 'text/html' }.
body = ['<h1>マイラックアプリ<h1>']
[ステータス、ヘッダー、ボディ]
終了
終わり
クラス RackMiddleware
def initialize(app)
app = app
end
def call(env)
ステータス、ヘッダー、ボディ = @app.call(env)
ボディ << env['SERVER_SOFTWARE'].
[ステータス、ヘッダー、ボディ]
終了
終了
RackMiddleware を使う
RackApp.newを実行する
最後の行では、ミドルウェアの指定に 使用 でアプリケーションを実行する。 走る。実行する準備はできている ラックアップ をコンソールに表示し、サーバーが動作していることを確認する。アプリケーションが稼働しているポートを確認し、アクセスするとこのように表示されるはずだ:

時には基本に立ち返り、私たちが扱っているテクノロジーについての洞察を学ぶことは良いことです。ラックを学ぶことで、アーキテクチャの概要が明確になり、その背後にある「魔法」が見えてくる。 Ruby Webフレームワーク.
