2014-01-30 2 views
0

У меня есть два приложения на базе модульной стойки Синатра: core.rb & project.rb:URL-адрес Карта всего пространства имен с использованием стойки?

# core.rb 
class Core < Sinatra::Base 
    get "/" do 
    "Hello, world!" 
    end 
end 

# project.rb 
class Project < Sinatra::Base 
    get "/" do 
    "A snazzy little Sinatra project I wish to showcase." 
    end 
    get "/foo" do 
    "If you see this, congratulations." 
    end 
end 

Моя цель состоит в том, чтобы просто отобразить все /projects пространство имен для Project класса, Тогда как все остальное обрабатывается с помощью Core класса. Я обнаружил, что вы можете сделать это в ограниченной степени 2-мя способами:

# config.ru 
require "./core.rb" 
require "./projects.rb" 

map "/projects" do 
    # Method #1: Using Sinatra's built-in Middleware 
    use Project 
    # Method #2: Using Rack::Cascade 
    run Rack::Cascade.new([Project, Core]) 
end 
run Core 

Оба методы, которые я пытался выше, имеют один и тот же эффект. Маршруты / и /projects показывают правильно, однако при переходе к /projects/foo он выдает ошибку, в которой говорится, что не может найти /foo маршрута в моем основных core.rb файла - который НЕ то, что я хочу. Другими словами, он ищет мой /foo маршрут в неверном файле :(

Итак, можно отобразить по всему /projects имен с использованием стоечных? И нет, добавив «/ проекты /» всем своим маршрутам в project.rb не вариант здесь я боюсь

ответ

2

Ваш файл config.ru, кажется, работает хорошо, когда я проверить это, но выглядит немного запутался Вот простой пример, который достигает того же:..

map "/projects" do 
    run Project # note run, not use 
end 
run Core 

Теперь любой запрос, где путь начинается с /projects w плохой маршрут будет перенаправлен в приложение Project, а все остальные будут отправлены в Core, что автоматически связано с корневым путем.

+0

Ahh, не выпустил решение, было так просто. Так в чем же разница между 'run' и' use'? И да, использование 'run' закончило работать отлично, спасибо. –

Смежные вопросы