1

ここからRackdevを開始します。

http://guides.rubyonrails.org/getting_started.htmlにある基本的なブログアプリを作成しました

投稿を作成したり、変更を加えたりすることができます。

今...

Rackの使い方を学び、ミドルウェアを作成しようとしています...

私はrailscast#150と#151をフォローしました...ここで私のコードをgithubで見ることができます...

https://github.com/thefonso/form_challenge

chromeのURL行でこれを行うと.....http:// localhost:3000 /?name = foo

コマンドラインで目的の結果が得られます。

aleph@mage:~/Projects/form_challenge git:master$ rails s
=> Booting WEBrick
=> Rails 3.2.11 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2013-01-23 17:01:30] INFO  WEBrick 1.3.1
[2013-01-23 17:01:30] INFO  ruby 1.9.2 (2012-04-20) [x86_64-darwin12.2.0]
[2013-01-23 17:01:30] INFO  WEBrick::HTTPServer#start: pid=32068 port=3000
{"name"=>"foo"}

素晴らしい、送信したデータを見ることができます。ブログの「投稿を作成」ページからデータを送信すると、そのデータをキャプチャできるはずです。

しかし、アプリの残りの部分を正常に動作させるにはどうすればよいですか?

...... http:// localhost:3000/に行くと

Rackアプリを入手しました...Railsアプリが欲しい

このRackミドルウェアを実行しているので、アプリの残りの部分を「引き継ぎ」ます。Railsアプリの「始まり」に到達できません。さらに言えば、データを受信したいフォームに到達できません。

ここでも、アプリ全体がここにあります。

https://github.com/thefonso/form_challenge

助けてくれてありがとう。

4

2 に答える 2

1

ミドルウェアは、コンストラクターで別のミドルウェア/アプリケーションに渡されます。そのアプリケーションはに応答する#callため、[変更の可能性がある]リクエストと環境を次のアプリに渡したい場合は#call、その内部アプリケーションを呼び出すだけです。

ミドルウェアをパイプラインのように考えてください。

A-> B-> C

要求は最も外側のミドルウェアAに入ります。これは、すぐに応答を返すか、ミドルウェアB(参照があります)を呼び出して、Bの戻り値とBが行った変更に基づいて何をするかを決定します。CによってはBも同様です。

わかる?

于 2013-01-23T23:55:09.787 に答える
1

ミドルウェアを作成するときは、次のミドルウェアまたはアプリケーションを呼び出す責任があります。ミドルウェアが現在実行しているのは、すべての要求に対して空の応答で応答することです。レールが要求を認識できるように、コールスルーすることはありません。次の行で修正できます。

@app.call(env)

これは、すべてのミドルウェアを介してコールチェーンを継続する重要なラインです。

したがって、ミドルウェアでは、@app.call(env)の代わりに実行してくださいreturn response

レールからの応答を操作したい場合は、

@status, @headers, @response = @app.call(env)

そして、必ず

return [@status, @headers, @response]

終わったら。

于 2013-01-24T00:04:26.370 に答える