Rails - grape APIエラーバージョンED APIのクラス
-
21-12-2019 - |
質問
バージョン管理された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
. 所属していません StackOverflow