葡萄目录结构(未初始化的常量错误)

时间:2017-07-30 18:59:58

标签: ruby-on-rails grape grape-api

当我尝试运行服务器时,我得到未初始化的常量DasBoot :: API :: V1(NameError)错误。 RubyMine识别路径,不会引发任何错误。我已尽力掌握一切,阅读文档,但没有成功。

Project tree:
├── app
│   ├── api
│   │   └── dasboot
│   │       ├── api
│   │       │   ├── v1
│   │       │   │   └── standings.rb
│   │       │   └── v1.rb
│   │       ├── api.rb
│   │       └── grape.rb

应用程序/ API / dasboot / api.rb

require_relative 'grape'

module DasBoot
  class API < Grape::API
    mount DasBoot::API::V1
  end
end

应用程序/ API / dasboot / API / v1.rb

class DasBoot::API::V1 < Grape::API
  version 'v1', using: :path, vendor: 'DasBoot'

  desc 'For testing API connection'
  get :hello do
    { message: 'Hello, sailor!' }
  end

  mount Standings
end

排名终点

应用程序/ API / dasboot / API / V1 / standings.rb

class DasBoot::API::V1::Standings < Grape::API

  resource :standings do
    desc 'Fetch Standings'

    get '' do
      "#{ Time.now }"
    end
  end
end

的routes.rb

...
mount DasBoot::API => '/api'
...

application.rb中

...
    config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
    config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
...

1 个答案:

答案 0 :(得分:0)

您的DasBoot模块和dasboot目录的命名似乎不一致。

在Rails中,我们使用CamelCase将模块和类命名为约定。如果Rails遇到它不知道的常量,它会在常量名称上使用underscore方法,并尝试为此常量找到相应的snake_case目录。在您的示例中,应该将包含“DasBoot”模块的预期目录命名为:

"DasBoot".underscore
=> "das_boot"

因此,DasBoot模块应位于das_boot/目录中。但根据您提供的目录结构,您的DasBoot模块位于dasboot目录中(中间没有_),这就是Rails无法管理的原因正确加载它。

如果您解决此问题(通过将模块重命名为Dasboot或将目录重命名为das_boot),则应该可以正常工作。