melhor / mais elegante maneira de compartilhar objetos entre uma pilha de aplicativos / middlewares montados em rac

Qual é o melhor idioma para compartilhar um objeto entre aplicativos / middlewares montados em rac

or exemplo, este config.ru possui dois aplicativos Sinatra mapeados para diferentes pontos de extremidade:

class App1 < Sinatra::Base
  # ...
end

class App2 < Sinatra::Base
  # ...
end

map '/app1' do
  run App1
end

map '/app2' do
  run App2
end

gora, se esses dois aplicativos precisarem compartilhar um objeto, seja um conector de banco de dados ou qualquer outro objeto, qual seria o melhor idioma para iss

Eu vejo basicamente duas opções:

1- Crie uma constante no nível config.ru e simplesmente consulte essa constante nos aplicativos. Por exemplo

SHARED_OBJECT = "hello world"

class App1 < Sinatra::Base
  get '/' do
    SHARED_OBJECT
  end
end

class App2 < Sinatra::Base
  get '/' do
    SHARED_OBJECT
  end
end

map '/app1' do
  run App1
end

map '/app2' do
  run App2
end

2- Crie um objeto singleton no nível config.ru e use-o nos aplicativos. Por exemplo

class SharedObject
  include Singleton

  def test
    @test ||= "hello world"
  end
end

class App1 < Sinatra::Base
  get '/' do
    SharedObject.instance.test
  end
end

class App2 < Sinatra::Base
  get '/' do
    SharedObject.instance.test
  end
end

map '/app1' do
  run App1
end

map '/app2' do
  run App2
end

Comentários / sugestões?
Colin

questionAnswers(1)

yourAnswerToTheQuestion