2010-06-25 4 views
2

Я пытаюсь получить приложение sinatra как подпуть в моем приложении rails 3. В частности, система очередности resque имеет веб-интерфейс на основе синатра, который я хотел бы получить через/resque в моем обычном приложении для рельсов.Sinatra app as Rails 3 subpath

Вы можете увидеть проект здесь: http://github.com/defunkt/resque

я нашел некоторые люди говорят о добавлении файла rackup и делать такие вещи:

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

Но я не знаю, куда девать это или как заставить его работать. Мое развертывание с пассажиром, но мне было бы неплохо также запустить его, когда я запустил сервер «rails». Какие-либо предложения?

--edit--

Я сделал некоторый прогресс, поставив следующий в конфигурации/routes.rb:

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

который, кажется, работает очень хорошо, однако он теряет (которая определена в пределах gem, я думаю), и, как результат, нет информации о стилистике и изображениях.

ответ

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-адреса не сопоставляются с корнем. То есть все URL-адреса, переданные HomeApp, начинаются с '/ home'. Есть ли способ переназначить их? – zaius

+0

Просто замените 'match '/ home" 'на' match'/''? –

+0

Это отобразит все маршруты в приложение синатра. Я хочу/resque/home позвонить/домой в приложении sinatra. Единственное решение, о котором я могу думать, это возиться с env Rack и проложить путь. – zaius

1

Иегуда (/ Scott S) '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 

(ответ с/о Michael Райдель - http://inductor.induktiv.at/blog/2010/05/23/mount-rack-apps-in-rails-3/)

+0

Я не вижу, что не так с предоставленным фрагментом. –