代码之家  ›  专栏  ›  技术社区  ›  zaius

Sinatra app as Rails 3 subpath

  •  2
  • zaius  · 技术社区  · 15 年前

    I'm trying to get a sinatra app as a subpath in my rails 3 app. 具体来说,Resque排队系统具有一个基于Sinatra的Web界面,我希望可以通过我常用的Rails应用程序上的/Resque进行访问。

    http://github.com/defunkt/resque

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

    但我真的不知道该把它放在哪里,也不知道如何让它运行。我的部署是和passenger一起部署的,但是当我运行“rails server”时,让它也运行会很好。有什么建议吗?

    --编辑——

    我通过在CONFIG/TRAIL.RB中设置以下内容取得了一些进展:

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

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Scott Swezey    15 年前

    您可以在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
    
        2
  •  1
  •   Aidan Feldman dariober    14 年前

    Yehuda (/Scott S)'s solution doesn't work for me with Rails 3.0.4 and Sinatra 1.2.1... 设置 :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/ )