2

我正在尝试将 sinatra 应用程序作为我的 rails 3 应用程序中的子路径。具体来说,resque 排队系统有一个基于 sinatra 的 Web 界面,我希望可以通过我常用的 Rails 应用程序上的 /resque 访问它。

你可以在这里看到这个项目:http: //github.com/defunkt/resque

我发现有些人在谈论添加一个 rackup 文件并做这样的事情:

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

但我真的不知道把它放在哪里或如何让它运行。我的部署是与乘客一起进行的,但如果我也运行“rails server”时也让它运行我会很高兴。有什么建议么?

- 编辑 -

通过将以下内容放入 config/routes.rb,我取得了一些进展:

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

这似乎工作得很好,但是它丢失了公用文件夹(我猜它是在 gem 中定义的),因此没有样式信息,也没有图像。

4

2 回答 2

3

您可以将任何机架端点设置为 rails 3 中的路线。 wycats 的本指南介绍了您正在寻找的内容以及您可以在 rails3 中执行的许多其他操作:

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

例如:

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

Basecamp::Application.routes do
  match "/home", :to => HomeApp
end
于 2010-06-25T23:43:11.997 回答
1

Yehuda (/Scott S) 的解决方案不适用于我使用 Rails 3.0.4 和 Sinatra 1.2.1...:anchor => false在匹配器中设置是关键:

# 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

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

于 2011-03-23T21:56:49.127 回答