質問

バージョン管理されたAPI(Rails-Grape)のバージョン固有のクラスを呼び出して、エラーを取得しようとしています

 NameError (uninitialized constant API::V1::XMLResponses):
09:23:36 web.1     |   app/api/v1/base.rb 
.

マイディレクトリ構造

app/
  api/
    v1/
      xmlresponses/
         phonebook.rb   
      api.rb
    v2/
      xmlresponses/ 
      api.rb
    api.rb
.

api.rb. 'v1 / base.rb'が必要 'v2 / base.rb'

module  API
  class Base < Grape::API
    mount API::V1 => '/'
    mount API::V2 => '/v2/'
  end
end
.

in v1 / base.rb iこのバージョンのAPI

のクラスにアクセスします。

V1 :: XMLResponses :: PhoneBook :: GetAll()

どうして私にこのエラーが発生したのですか?

あなたの答えをありがとう、私はそれがどのようにして行われているかを示す単純なアプリを作成しました https://github.com/asmmund / grape_versioning

役に立ちましたか?

解決

あなたのモジュール構造の中で単に問題になるかもしれません。 唯一のrequireを存分の場合は多分。

私はこのようなものを書くでしょう:

/foo
  v1/
  |_ responses/
  |  |_ time.rb
  |
  |_ base.rb

  v2/
  |  
  |_ base.rb

  api.rb
  config.ru
.

ファイル:

# api.rb`

require 'grape'
require './v1/base.rb'
require './v2/base.rb'

module FooBar
  module API
    class Base < Grape::API
      mount API::V1 => '/'
      mount API::V2 => '/v2/'
    end
  end
end


# v1/base.rb
require_relative './responses/time.rb'

module FooBar
  module API
    class V1 < Grape::API
      get 'foo' do
        "foo"
      end
      get 'time' do
        API::Responses::Time.api_time
      end
    end
  end
end

# v1/responses/time.rb
module FooBar
  module API
    module Responses
      class Time
        def self.api_time
          "API time"
        end
      end
    end
  end
end

# v2/base.rb
module FooBar
  module API
    class V2 < Grape::API
      get 'bar' do
        "bar"
      end
    end
  end
end
.

config.ru

# config.ru
require './api.rb'
run FooBar::API::Base
.

で実行:

thin start
...
curl 0.0.0.0:3000/foo
=> foo
curl 0.0.0.0:3000/v2/bar
=> bar
curl 0.0.0.0:3000/time
=> API time
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top