Как исправить «неинициализированную константу» при использовании приложения на основе «пространства имен» - PullRequest
3 голосов
/ 22 апреля 2020

Я пытаюсь создать приложение на основе пространства имен в Ruby с помощью Sinatra, но у меня есть проблема, которую я не понимаю.

Пример структуры:

. / api / v1 / service / app_service.rb:

module Api::V1::Service
    class AppService
    end
end

. / run.rb:

require 'sinatra'
require './api/v1/service/app_service'

, и в этом случае я получил ошибку «неинициализированная константа Api».

Если я использую обычное создание модуля, все в порядке:

module Api
  module V1
    module Service
      class AppService
      end
    end
  end
end

Я также испробовал плохое и уродливое решение, требуя файл, который предопределил каждый модуль:

. / beforefine.rb:

module Api
  module V1
    module Service
    end
  end
end

. / run.rb:

require 'sinatra'
require './predefine'
require './api/v1/service/app_service'

, но это не решение, потому что тесты rspe c запускаются с ошибкой при том же ошибка.

Есть ли решение для этого?

...