GraphQL Ruby。パフォーマンスについては?
GraphQLには、他のテクノロジーと同様に問題があり、そのいくつかはアーキテクチャに直接起因し、いくつかは他のアプリケーションで見られるものと同じである。しかし、その解決策は...
Rubyのエコシステムにおけるラックの役割について専門家から学び、Rubyのスキルをアップさせましょう。
と協力しながら Rubyウェブフレームワーク というのは、当たり前のことを当たり前にやっているからだ。フレームワークがHTTPリクエストを処理し、ミドルウェアのロジックを実行してくれることは分かっている。好奇心が強くなるにつれ、舞台裏に何があるのか気になり始め、そこで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フレームワーク.