NewReli c :: Промежуточное программное обеспечение стойки, не обнажающее Sinatra :: Базовые настройки - PullRequest
0 голосов
/ 20 марта 2020

У меня есть модульное приложение Sinatra, где я использую

run Rack::URLMap

для добавления различных сервисов, где каждый сервис представляет собой Sinatra :: Base

Я добавил промежуточное ПО в одном служб, использующих метод settings. Похоже, что промежуточное ПО стойки NewReli c не раскрывает этот метод.

class MyService < Sinatra::Base
  configure do
    set :optional_auth, [
      { method: :get, path: ''},
      { method: :get, path: '/:id'},
      { method: :get, path: '/:id/attachments'},
      { method: :get, path: '/:id/comments'}
    ]
    mime_type :json, 'application/json'
    use Rack::PostBodyContentTypeParser
    use MyMiddleware
  end

  get '/' ....

Локально все работает нормально, однако при развертывании MyMiddleware добавляется после NewReli c :: Rack, поэтому при вызове промежуточного программного обеспечения @app больше не является MyService это NewReli c :: Стойка без открытого метода settings.

Кто-нибудь еще испытывал это? Я запускаю приложение с bundle exec puma

1 Ответ

0 голосов
/ 20 марта 2020

Я смог обойти эту проблему, обновив свое промежуточное ПО

    def initialize app, &block
      @app = app
      @block = block
    end

    def call env
      @block.call(env)
      do_something(env[:my_middleware_option])
      ...
      @app.call(env)
    end

И инициализировав свое промежуточное ПО с помощью

    use MyMiddleware do |env|
      env[:my_middleware_option] = "any data type"
    end
...