В Rails 3 вы можете довольно легко подключить Rack-приложения, используя новый синтаксис маршрутизации и наследуя ваши контроллеры от ActionController::Metal
или просто определяя 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