11

Ruby で Web アプリを構築したいのですが、フレームワークを使用せずに構築できるかどうかわかりません。ほとんどの Ruby 開発者が Rails や Sinatra のようなフレームワークを使用する理由はわかりません。

既存のフレームワークに基づいていない Ruby Web アプリをセットアップするにはどうすればよいですか?

4

1 に答える 1

83

フレームワークを使わずにRubyでWebアプリを作ることは可能ですか?

長すぎる; 読まなかった

はい、もちろん可能です。ほとんどの Ruby フレームワークは、Web サーバー インターフェイスなどの他のミドルウェア ライブラリの上に純粋な Ruby を使用して構築されています。

Ruby と Web

Ruby は汎用言語です。したがって、Web 開発用に特別に設計されたわけではありません。たとえば、PHP は Web アプリケーションを作成するために作成された言語です。Ruby では、HTTP ヘッダーと Web 固有の要素を適切に処理するためにいくつかのライブラリが必要になります。

たとえば、Python (もう 1 つの汎用プログラミング言語) には、WSGI (Web Server Gateway Interface) と呼ばれる標準の Web サーバー インターフェイス仕様があります。WSGI 仕様を実装するすべてのサーバーは、 WSGI互換と呼ばれます。また、WSGI 互換サーバーは、同じ WSGI Python スクリプトを同じ方法で実行できます。

Rubyについて話すとき、なぜ私はあなたにこれを話しているのですか? Ruby は WSGI と非常によく似た概念を持っているため、まだ標準ではないという例外があります。その名前はRackで、 PHP を使用しているかのようにRuby を使用できるように、自分で処理したくない一般的な低レベルの HTTP/Server のものを処理するためのインターフェースを提供します。

ルビー、ラック、アパッチ

実際の例を見てみましょう: Apache。Apache は、最も一般的な Web サーバーの 1 つです。PHP は Apache とどのように連携しますか? とmod_php。Python WSGI 互換アプリケーションはどのように Apache と連携しますか? とmod_wsgi。Ruby Rack 互換アプリケーションは Apache とどのように連携しますか? とmod_rack。ここにパターンが見えますか?Web サーバーは、アプリケーションを要求/応答 Web コンテキストに適切にリンクする方法を知る必要があります。

ラック例

この抽象的な話ではこれ以上取り扱わずに、例に焦点を当てましょう:

class HelloWorld
    def call(env)
        [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
    end
end

この例は、Rack の Web サイトで提供されており、Rack 互換のスクリプトがどのように実行されるかを説明しています。

  • Web サーバーにインストールrackします (Google には、Web サーバーに固有のチュートリアルがたくさんあります)。
  • config.ruルートフォルダーにファイルを作成します(ほとんどが.ruRubyです)
  • そのスクリプトを貼り付けます
  • runメソッドで実行します

ほら、ウェブサーバーインターフェースがあります。ハッシュには現在のリクエストのenv環境変数が含まれ、返される配列には 3 つのコンポーネントが含まれます。

  1. 応答ステータス。200は「大丈夫」の意味。404 は「見つかりません」の略です。等々。
  2. HTTP ヘッダー。これらは、応答本文を記述します。その長さ。その内容。等々。
  3. レスポンスボディ。これには、アプリケーションの実際の出力が含まれます。HTML、JSON、XML、HXML、単純なテキスト...何でも。

たとえば、PHP では、これはすべて自動的に行われます。応答ステータスを実行echo "Hello";すると、PHP インタープリターによってヘッダーが生成されます。

代替案に関する注意

このフィールドは好きなだけ掘り下げることができますが、以下にリストされているテクノロジーのほとんどは非推奨であるか、コミュニティによってその使用が強く推奨されていません。

Web の最初の数年間、サーバー側で Perl、Python、Ruby、C スクリプトを実行するために使用される一般的なインターフェイスがありました。CGIまたは Common Gateway Interface です。これは、ほとんどすべてのプログラミング言語で使用できるインターフェイスですが、一般的に遅いと考えられています。

このインターフェイスを高速化することで復活させることを考えた人もいました。そこから、FCGIまたは FastCGI が生まれました。このテクノロジーは、あなたが思っているよりも頻繁に使用されています。一部の PHP スクリプトは、実行速度を上げるために FCGI スクリプトに変換されることがあります。他にも参考文献がたくさんあるので、このトピックについてはこれ以上説明しません。

最後に、独自の Web サーバーを作成できます。実際には、Ruby を使用するために Ruby で Web サーバーを作成する必要はありません。理論的に言えば、Web サーバーは次のように単純です。

  1. リクエストが来るまでポート (ほとんどの場合 80) をリッスンします。
  2. リクエストに対処する
  3. 応答を出力する
  4. 1に行く

実際の環境では、実稼働 Web サイト用に Web サーバーを自分で実装することは望ましくありません。だから私は間違いなくそれを思いとどまらせます。

はいの場合、ほとんどの Ruby Web 開発者がフレームワークを選択するのはなぜですか?

長所

フレームワークは、開発を高速化する目的に役立ちます。締め切りがある場合は、低レベルのものを扱いたくないので、できるだけframework build -blog多くの退屈なものを管理して、実際のアプリケーション設計に集中できるコマンドが必要です。

フレームワークは通常オープンソースであり、フレームワークを迅速に改善するのに役立つ大きなコミュニティがあります。10,000 組の目で見たコードのバグは、自分で書いたコードよりも 10,000 倍速く発見されることは容易に理解できます。

短所

ニーズに対して大きすぎるフレームワークもあれば、小さすぎるフレームワークもあります。Ruby のコンテキストには、巨大な Rails とその弟分である Sinatra があります。1 つは巨大で、もう 1 つは非常に小さく、邪魔になりません。間に何かが欲しいときもあります。

通常、フレームワークは非常に汎用的です。これは、コンテキストにとって明らかと思われるものを構成する必要があることを意味します。

フレームワークには、必要以上のコードが含まれています。これは自分で推測できる事実です。これは通常、複雑さが増し、直接的にバグが増えることを意味します(ただし、これは周囲の巨大なコミュニティによって補償されます)。

于 2013-04-08T13:15:40.217 に答える