Ruby on rails 在Rails中安装多个GrapeAPI时出现问题

Ruby on rails 在Rails中安装多个GrapeAPI时出现问题,ruby-on-rails,ruby,module,rack,grape-api,Ruby On Rails,Ruby,Module,Rack,Grape Api,我有两个API,我正试图安装在我的Rails应用程序中——一个叫做“v1”,另一个叫做“twilio”。每个API将由多个文件组成,因此我希望每个API都有自己的文件夹。在我的app/api目录中,我有两个文件夹--“v1”和“twilio”--以及一个名为“api.rb”的文件,我正试图用它来装载这两个api。内容包括: module API class V1 < Grape::API prefix "api" format :json mount API::

我有两个API,我正试图安装在我的Rails应用程序中——一个叫做“v1”,另一个叫做“twilio”。每个API将由多个文件组成,因此我希望每个API都有自己的文件夹。在我的app/api目录中,我有两个文件夹--“v1”和“twilio”--以及一个名为“api.rb”的文件,我正试图用它来装载这两个api。内容包括:

module API
  class V1 < Grape::API
    prefix "api"
    format :json
    mount API::Root => '/v1'
  end

  class Twilio < Grape::API
    prefix "twilio"
    format :xml
    mount API::Twilio_API => '/twilio'
  end
end
当我启动rails服务器时,出现以下错误:

`load_missing_constant': Expected [My rails app]/app/api/v1/root.rb to define Root (LoadError)

我不明白这一点,因为root.rb确实定义了根类。任何帮助都将不胜感激。

我想它希望您的类名采用与目录结构相同的结构。这将给你:


类API::V1::根
终点

或者是那些字里行间的事


(从我的手机…

我遇到了一个类似的错误,并通过要求将文件放在类的顶部来解决它。i、 e

require 'root'
require 'twilio'
在api.rb中

在Grape API中,有自动加载文件名的说明,不确定这是否已完成或是否有助于您:

Place API files into app/api and modify application.rb.

config.paths.add "app/api", glob: "**/*.rb"
config.autoload_paths += Dir["#{Rails.root}/app/api/*"]

在Grape中,您可以在另一个API中装载多个API。这意味着您可以为API使用一个“基类”,并将所有其他类装入其中

文件结构:

app/
  api/
    v1/
      v1_api.rb
    twilio/
      twilio_api.rb
    api.rb
require 'v1/v1_api'
require 'twilio/twilio_api'

module API
  class Base < Grape::API
    mount API::V1
    mount API::Twilio
  end
end
module API
  class V1 < Grape::API
    prefix "v1"
    format :json

    get :hello do
      { text: 'Hello from V1' }
    end
  end
end
module API
  class Twilio < Grape::API
    prefix "twilio"
    format :xml

    get :hello do
      { text: 'Hello from Twilio' }
    end
  end
end
mount API::Base => '/api'
app/api/api.rb:

app/
  api/
    v1/
      v1_api.rb
    twilio/
      twilio_api.rb
    api.rb
require 'v1/v1_api'
require 'twilio/twilio_api'

module API
  class Base < Grape::API
    mount API::V1
    mount API::Twilio
  end
end
module API
  class V1 < Grape::API
    prefix "v1"
    format :json

    get :hello do
      { text: 'Hello from V1' }
    end
  end
end
module API
  class Twilio < Grape::API
    prefix "twilio"
    format :xml

    get :hello do
      { text: 'Hello from Twilio' }
    end
  end
end
mount API::Base => '/api'

重新启动rails服务器,就可以开始了。此外,您应该能够轻松地从app/api/twilio和app/api/v1目录自动加载文件,因此您不需要它们。

我尝试更改我的装载调用,以遵循模式“mount::api::v1::Root”,并在父模块中分别使用名称“v1”和“twilio”包装“Root”和“twilio”类定义,为了匹配目录结构,但我仍然得到相同的错误。谢谢!这正是我遇到的情况。:)