开发者

Sinatra app as Rails 3 subpath

I'm trying to get a sinatra app as a subpath in my rails 3 app. Specifically, the resque queuing system has a sinatra based web interface that I would like to have accessible through /resque on my usual rails app.

You can see the开发者_如何学Python project here: http://github.com/defunkt/resque

I found some people talking about adding a rackup file and doing this sort of thing:

run Rack::URLMap.new( \
  "/" => ActionController::Dispatcher.new,
  "/resque" => Resque::Server.new
)

But I don't really know where to put that or how to make it run. My deployment is with passenger, but it would me nice to also have it running when I run 'rails server' too. Any suggestions?

--edit--

I've made some progress by putting the following in config/routes.rb:

match '/resque(/:page)', :to => Rack::URLMap.new("/resque" => Resque::Server.new)

Which seems to work pretty well, however it loses the public folder, (which is defined within the gem I guess), and as a result, there is no styling information, nor images.


You can setup any rack endpoint as a route in rails 3. This guide by wycats goes over what you are looking for and many of the other things you can do in rails3:

http://yehudakatz.com/2009/12/26/the-rails-3-router-rack-it-up/

For example:

class HomeApp < Sinatra::Base
  get "/" do
    "Hello World!"
  end
end

Basecamp::Application.routes do
  match "/home", :to => HomeApp
end


Yehuda (/Scott S)'s solution doesn't work for me with Rails 3.0.4 and Sinatra 1.2.1... setting :anchor => false in the matcher is the key:

# in routes.rb
match "/blog" => MySinatraBlogApp, :anchor => false

# Sinatra app
class MySinatraBlogApp < Sinatra::Base
  # this now will match /blog/archives
  get "/archives" do
    "my old posts"
  end
end

(answer c/o Michael Raidel - http://inductor.induktiv.at/blog/2010/05/23/mount-rack-apps-in-rails-3/)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜