2013-12-22 9 views
7

ラックアップファイルのuserunの違いは何ですか? runは常にconfig.ruの末尾にあるようですが、useを使用できるように見えます。啓発的な資源も非常に高く評価されるだろう。ラックでの使用と実行の違い

答えて

1

useは、ミドルウェアのため

class MyCustomMiddleware 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    if condition 
    env['set-header'] = 'Middleware Can modify the response & pass it into next middleware' 
    end 
    @app.call(env) 
end 

runは、呼び出しに応答し、useの違いを理解するには200

class MyApp 
    def self.call(env) 
    [200, { "Content-Type" => "text/html" }, ["OK"]] 
end 
end 

のようなHTTPレスポンスコードで、最終的なラックレスポンスを返す引数を取るされ& run。典型的なラックアプリの構造を見ることができます。

典型的なラックアプリ ラックアプリcallに応答するが、最終ラック応答&をHTTP応答コード(200404を含む最終的なラック応答を返すcallに応答オブジェクトを返さない複数のミドルウェア(単数または複数)を含む、500等)。典型的には、ミドルウェアとして機能する複数のオブジェクトが存在し、応答コードで最終ラック応答を返すオブジェクトが&になります。これで今use & run

、 間

違い、それは我々が一度だけ、単一のラックAppの各ミドルウェア& runのために一度、useを複数回呼び出すことができそうです。 useはミドルウェアを呼び出すだけで、runはラックオブジェクトを実行し、最終的なラック応答をHTTPステータスコードで返します。場合

config.ru

use MyCustomMiddleware 
use MyCustomMiddleware2 
use MyCustomMiddleware3 
run MyApp 

上記の何が間違っている場合は、私に教えてください。だから私はそれを修正することができます。

+0

ミドルウェアのパイプラインを、認証エラーなどによって停止させることはできますか? – Cenoc

+0

^^^はい。実際には、似たようなauthの方法がワーデンによって使用されています - ラックベースの認証であり、deviseのようなすべての人気のある宝石が使用します。あなたは[呼び出し方法のソース](https://github.com/hassox/warden/blob/master/lib/warden/manager.rb#L30-L49)を見ることができます。そのコアでは、#callメソッドは単に条件付きのものをチェックして何かをしているだけです。私の例のABOVEと同じです。 – CuriousMind

関連する問題