当我尝试运行服务器时,我得到未初始化的常量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', '*')]
...
答案 0 :(得分:0)
您的DasBoot
模块和dasboot
目录的命名似乎不一致。
在Rails中,我们使用CamelCase将模块和类命名为约定。如果Rails遇到它不知道的常量,它会在常量名称上使用underscore
方法,并尝试为此常量找到相应的snake_case目录。在您的示例中,应该将包含“DasBoot”模块的预期目录命名为:
"DasBoot".underscore
=> "das_boot"
因此,DasBoot
模块应位于das_boot/
目录中。但根据您提供的目录结构,您的DasBoot
模块位于dasboot
目录中(中间没有_
),这就是Rails无法管理的原因正确加载它。
如果您解决此问题(通过将模块重命名为Dasboot
或将目录重命名为das_boot
),则应该可以正常工作。