ActionController::Metal
Rails 3 では、新しいルーティング構文を使用し、コントローラーを から継承するか、定義するだけで、非常に簡単に Rack アプリをフックできますself.call
。
Railscast #222 を読んで(または視聴して)、 wycats のブログをチェックしてください (抜粋の例については以下を参照してください)。
この道をたどる場合に対処する必要がある追加のケースについてはすでに認識しているので、行き詰まる前にそれが必要であることを確認してください。通常、プログラマーよりもサーバーに $ を投下する方が安価です。ハードウェアと帯域幅はかなり安価です。
個人的には、アプリが既に実行されていてトラフィックが多すぎて詰まらない限り、これは「時期尚早の最適化」に該当するように感じます。
いくつかの良い例:
# config/routes.rb
# Hook in Sinatra
root :to => HomeApp
# Write your own barebones Rack compatible code
match "/processes" => ProcessesApp
# Even specify an inline proc
match "/heartbeat", :to => proc {|env| [200, {}, ["App is running"]] }
# /lib/home_app.rb
class HomeApp < Sinatra::Base
get "/" do
"Hello from Sinatra"
end
end
# lib/processes_app.rb
class ProcessesApp
def self.call(env)
[200, {}, [`ps -axcr -o "pid,pcpu, pmem, time, comm"`]]
end
end