Я пытаюсь использовать приложение 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?