私は、ラックを使用するあなたのケースでは、これはルビーです:
- ラックは、これらすべてのWebアプリケーションサーバ(WEBrickに、Mongrelのなど)へのラックを接続ハンドラを含んでいます。
- Rackには、RackをさまざまなWebフレームワーク(Sinatra、Railsなど)に接続するアダプタが含まれています。
- サーバーとフレームワークの間で、ミックウェアを使用してアプリケーションのニーズに合わせてRackをカスタマイズできます。
使用するためには、ラックあなたは、ラックのアプリケーションを作成する必要があります。
- は、callメソッドを答えなければなりません。
- コールmehtodはサーバによって呼び出され、CGI情報でenv変数を受信する必要があります。 A)ステータス :整数 B)ヘッダ:ハッシュ C)体:それぞれに応答して、それぞれのすべての呼び出しの文字列をretunsオブジェクト
- は、3つの要素を持つ配列を返さなければなりません。
Rackミドルウェアの基本的な考え方は、呼び出し元のクライアントとサーバーの間にあり、サーバーに送信する前にHTTP要求を処理し、クライアントに返す前にHTTP応答を処理することです。
これはあなたの質問の基本的な、答えは:
test_rack.rb
class MyApp
def call env
[200, {"Content-Type" => "text/html"}, ["Hello Rack Participants"]]
end
end
config.ru
require './test_rack.rb'
run MyApp.new
、アプリケーションを起動して、ローカルホストへの呼び出しします:9292 /何
╭─[email protected] ~/learn/ruby/stackoverflow/scripting ‹[email protected]› ‹1.7› ‹SBCL 1.3.5›
╰─$ rackup config.ru
[2016-05-08 11:17:41] INFO WEBrick 1.3.1
[2016-05-08 11:17:41] INFO ruby 2.2.3 (2015-08-18) [x86_64-darwin15]
[2016-05-08 11:17:41] INFO WEBrick::HTTPServer#start: pid=2610 port=9292
::1 - - [08/May/2016:11:18:04 +0200] "GET /patata HTTP/1.1" 200 - 0.0010
::1 - - [08/May/2016:11:18:04 +0200] "GET /favicon.ico HTTP/1.1" 200 - 0.0005
::1 - - [08/May/2016:11:18:09 +0200] "GET /patata/calimero HTTP/1.1" 200 - 0.0003
はのは、コンソールでの作業ラックを見てみましょう、複数のWebサーバを参照して、呼び出し関数を作成するためのラムダを渡す
require 'rack'
=> true
irb(main):010:0> Rack::Handler::constants
=> [:CGI, :FastCGI, :Mongrel, :EventedMongrel, :SwiftipliedMongrel, :WEBrick, :LSWS, :SCGI, :Thin]
irb(main):026:0> Rack::Handler::WEBrick.run lambda { |env| [200,{"Content-Type" => "text/plain"}, ["Hello. The time is #{Time.now}"]] }
[2016-05-08 11:22:39] INFO WEBrick 1.3.1
[2016-05-08 11:22:39] INFO ruby 2.2.3 (2015-08-18) [x86_64-darwin15]
[2016-05-08 11:22:39] INFO WEBrick::HTTPServer#start: pid=1798 port=8080
〜gさらにO:
https://blog.engineyard.com/2015/understanding-rack-apps-and-middleware
https://github.com/rack/rack
はええ、私はシナトラについて知っています。しかし、私が達成しようとしているのは、これらすべての要求をキャッチし、URIに基づいてRackアプリケーションを動的に実行したいということです。 Sinatraはウェブにとって最高ですが、私はこの特定の作業にSinatraを使用することは賢明ではないと思います。 –
@FrankLeveringシェルコマンドをディッシングすることを除いて、Rackアプリケーションを "動的に"実行することについてはわかりません。あなたは[rack docs](http://rack.github.io/)を見ましたか?賢明ではない、ちょうど私が思うような考えを投げていると言っている。私はあなたが "直接アプリケーションを扱う"例を使用し、そのファイルにいくつかのsinatraルートを追加できるのだろうか? –
@FrankLevering特定のエンドポイントでラックアプリケーションを「マウント」することもできます。 [multiple-sinatra-apps-using-rack-mount](http://stackoverflow.com/questions/6496433/multiple-sinatra-apps-using-rack-mount)を参照してください。 –