1

Railsスタックについての私の単純な理解は、それが次のことを行うということです(一般的に)

  1. 入力は、HTTP メッセージ (GET、POST、PUT、DELETE、HEAD)、URL、いくつかの (オプションの) Cookie、(オプションの) セッション トークン、および場合によっては JSON または XML 形式でパックされたデータです。
  2. この HTTP メッセージは、Rack によって処理されます。Rack は、メッセージにデータを追加または削除する一連の「ミドルウェア」関数を実行し、そのデータを使用してプログラムのデータ ストアからデータを追加、変更、または削除します。
  3. Rack の出力の HTTP メッセージは Rails ルーターに送信され、Rails ルーターはそれをコントローラー、アクション、およびセッション情報、Cookie、およびその他のパラメーターを含む params ハッシュにマップします。データは適切なコントローラーにディスパッチされます。
  4. コントローラー メソッドはパラメーターを解析し、それを (モデルを介して) データベースからのデータとアルゴリズム的に結合し、オプションでデータを変更してから、@ で始まる一連の変数をビュー テンプレートにディスパッチします。
  5. ビュー テンプレートはデータを受け取り、それをビュー テンプレートとマージして、適切な形式 (HTML、JS、JSON、XML など) のビューを形成するか、(HTTP リターン コードを介して) 呼び出し元にリダイレクトするように指示します。別の URL。

Railsコンソールを使用してRails Webアプリケーションでやりたいことは

  1. URL、セッション ID、Cookie、およびエンコードされたデータ (JSON または XML) を使用して、有効な HTTP メッセージを作成します。
  2. このデータを Rack インターフェイスに挿入し、Rails ルーターに送信される前に何が出力されるかを調べます。
  3. 次に、そのデータを Rails ルーターに送信し、コントローラーに送信される前に何が出力されるかを確認します。
  4. 次に、そのデータをコントローラーに送信し、ビュー テンプレートに送信される前に何が表示されるかを確認したいと思います。
  5. 次に、そのデータを取得してビュー テンプレートを介して実行し、STDOUT に表示するか、自動的に Web ブラウザーを開いてレンダリングするようにします。

これを実行できる既存の Rails ツールはありますか? そうでない場合は、これらのインターフェイスが発生する Rails コードを教えてもらえますか?

4

1 に答える 1

0

探しているもののほとんどは、Rails のアクションパック ライブラリ内にあります。

ActionDispatch は、ラック、ミドルウェア、およびルーターとのインターフェースを処理します。要求は、ミドルウェアの最後の部分としてルーターに到達します。ルーター自体は、action_dispatch/routing/mapper 内で呼び出されます。したがって、リクエストがルーターに到達する前にインターセプトしたい場合は、ルートが呼び出される前に独自のミドルウェアを挿入します。

ルーターマップが有効なルートを持っていることを確認すると、railties ライブラリにあるアプリケーションを呼び出します。これにより、アクションパックに戻って ActionController ミドルウェアに戻ると思います。コントローラーに到達する前にインターセプトするためにどこに結び付けたいのか正確にはわかりませんが、その ActionMiddleware クラスのどこかにあると思います。

そこからアクションパックへ。コントローラーが呼び出すレンダー/リダイレクトは、アクションパック内で何が起こるかを設定します。AC がどこで AP を呼び出しているか正確にはわかりませんが、それをふるいにかけ、探しているパスを見つけることができるはずです。

応答については、ミドルウェアに戻ります。Rails がビューをつなぎ合わせると、基本的には巻き戻されてミドルウェア スタックに戻り、Rack に応答が返されます。

それが役立つことを願っています。

于 2012-11-28T01:07:11.583 に答える