2010-06-25 48 views
2

我試圖在我的rails 3應用程序中將sinatra應用程序作爲子路徑。 特別是,resque排隊系統有一個基於sinatra的web界面,我希望通過我的通常的rails應用程序可以訪問/ resque。作爲Rails 3子路徑的Sinatra應用程序

你可以看到這裏的項目:http://github.com/defunkt/resque

我發現一些人在談論添加rackup文件,做這樣的事情:

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

但我真的不知道往哪裏放或如何使其運行。我的部署與乘客有關,但當我運行'rails服務器'時,我也很高興能夠運行它。有什麼建議麼?

- 編輯 -

我做了通過將在配置以下/ routes.rb中取得了一些進展:

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

這似乎工作得很好,但它失去了公共文件夾(我猜是在寶石中定義的),結果,沒有樣式信息,也沒有圖像。

回答

3

您可以設置任何機架端點在軌道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 
+0

謝謝!這就是我一直在尋找的。但是URL不映射到根目錄。即所有傳遞給HomeApp的網址都以'/ home'開頭。有沒有辦法重新映射它們? – zaius 2010-06-25 23:57:58

+0

只需用'match'/「'替換'match'/ home」'? – 2010-06-26 00:05:35

+0

這將映射到sinatra應用程序的所有路線。我想/ resque/home在sinatra應用程序中調用/ home。我能想到的唯一解決方案是混亂Rack env並剝離路徑。 – zaius 2010-06-26 01:29:34

1

耶胡達(/斯科特S)的解決方案不適合我使用Rails 3.0.4和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邁克爾Raidel - http://inductor.induktiv.at/blog/2010/05/23/mount-rack-apps-in-rails-3/

+0

我無法看到提供的代碼段出了什麼問題。 – 2011-06-07 15:24:15

相關問題