Sinatra rack middleware захватывает '/' корневой URL - PullRequest
0 голосов
/ 02 марта 2012

Я пытаюсь использовать приложение Sinatra в качестве промежуточного программного обеспечения в моем приложении Rails.

Я протестировал базовое приложение Sinatra в папке /lib приложения Rails, use d в промежуточном ПОи установить маршрут.Это сработало нормально.

Что я хочу сделать, это извлечь приложение Sinatra и включить его в качестве драгоценного камня.Таким образом, я могу запустить приложение Sinatra самостоятельно или использовать его в нескольких приложениях Rails.

Приложение Sinatra

# myrackapp/lib/myrackapp.rb
module Myrackapp
  class Application < Sinatra::Base

    set :root, File.dirname(__FILE__)

    get "/" do
      "Rack Home"
    end

    get '/rackroute' do
      "Hello, Rack Page"
    end

    end
end

Myrackapp также имеет gemspec- ничего интересного там нет, но я могу опубликовать в случае необходимости.

Приложение Rails

# Gemfile
gem 'myrackapp', path: "/Users/gareth/Code/myrackapp"

-

# config/application.rb
module Myrailsapp
  class Application < Rails::Application
    ...
    config.middleware.use "Myrackapp::Application"
  end
end

-

# config.routes.rb
root :to => 'pages#show', :id => 'home'
mount Myrackapp::Application => "/rackapp"

Вот мой rake middleware вывод:

    rake middleware
    use ActionDispatch::Static
    use Rack::Lock
    use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x141ded4>
    use Rack::Runtime
    use Rack::MethodOverride
    use ActionDispatch::RequestId
    use Rails::Rack::Logger
    use ActionDispatch::ShowExceptions
    use ActionDispatch::DebugExceptions
    use ActionDispatch::RemoteIp
    use ActionDispatch::Reloader
    use ActionDispatch::Callbacks
    use ActiveRecord::ConnectionAdapters::ConnectionManagement
    use ActiveRecord::QueryCache
    use ActionDispatch::Cookies
    use ActionDispatch::Session::CookieStore
    use ActionDispatch::Flash
    use ActionDispatch::ParamsParser
    use ActionDispatch::Head
    use Rack::ConditionalGet
    use Rack::ETag
    use ActionDispatch::BestStandardsSupport
    use Myrackapp::Application
    run Myrailsapp::Application.routes

Когда я иду на http://myapp.dev/rackapp, я получаю корневой путь Myrackapp - правильное поведение

Когда я иду наhttp://myapp.dev/rackapp/rackroute Я получаю Myrackapp путь /rackroute - снова, правильное поведение

Проблема

Когда я в браузере перехожу на http://myapp.dev, меня направляют на * 1045корневой путь *.

Когда я включил приложение Sinatra непосредственно в мое приложение Rails, посещение http://myapp.dev отобразило правильное действие pages#show.

Что я могу сделать, чтобы получить приложение Sinatraне взломать корневой путь Rails?

1 Ответ

1 голос
/ 02 марта 2012

На самом деле вам не нужно включать приложение Sinatra в качестве промежуточного программного обеспечения, чтобы делать то, что вы хотите.

Включение его в качестве промежуточного программного обеспечения будет означать, что через него маршрутизируются все запросы, которые вам не нужны / не нужны для обеспечения маршрутов.

Если вы хотите добавить маршруты автоматически при включении драгоценного камня в приложение rails, вы можете добавить railtie, добавляющее маршруты в приложение. Я не могу вспомнить, как это выглядит, но это должно быть довольно просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...