简体   繁体   English

Rails:Grape API - NameError:未初始化的常量API

[英]Rails: Grape API - NameError: uninitialized constant API

I am currently learning how to use Rails. 我目前正在学习如何使用Rails。 I followed the tutorial on this site: http://funonrails.com/2014/03/building-restful-api-using-grape-in-rails/ 我按照本网站上的教程: http//funonrails.com/2014/03/building-restful-api-using-grape-in​​-rails/

I put my files not in the lib folder, but in the app folder and edited the application.rb as told in the tutorial. 我把我的文件放在lib文件夹中,但是在app文件夹中并按照教程中的说明编辑了application.rb。 The rest of the code is the same as in the tutorial. 其余代码与教程中的相同。

I completed it up until the custom error formatter, but if I start the Rails server to test everything I get the following error: 我完成了它直到自定义错误格式化程序,但如果我启动Rails服务器测试一切我收到以下错误:

                Exiting
E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config/routes.rb:3:in `block in <top (required)>': uninitialized constant API (NameError)
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-4.1.8/lib/action_dispatch/routing/route_set.rb:337:in `instance_exec'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-4.1.8/lib/action_dispatch/routing/route_set.rb:337:in `eval_block'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/actionpack-4.1.8/lib/action_dispatch/routing/route_set.rb:315:in `draw'
    from E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config/routes.rb:1:in `<top (required)>'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application/routes_reloader.rb:40:in `block in load_paths'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application/routes_reloader.rb:40:in `each'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application/routes_reloader.rb:40:in `load_paths'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application/routes_reloader.rb:16:in `reload!'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application/routes_reloader.rb:26:in `block in updater'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.1.8/lib/active_support/file_update_checker.rb:75:in `call'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.1.8/lib/active_support/file_update_checker.rb:75:in `execute'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application/routes_reloader.rb:27:in `updater'
    from C:in `execute_if_updated'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application/finisher.rb:71:in `block in <module:Finisher>'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/initializable.rb:30:in `instance_exec'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/initializable.rb:30:in `run'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/initializable.rb:55:in `block in run_initializers'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:226:in `block in tsort_each'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:427:in `each_strongly_connected_component_from'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:345:in `each'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:345:in `call'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:345:in `each_strongly_connected_component'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:224:in `tsort_each'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:205:in `tsort_each'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/initializable.rb:54:in `run_initializers'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/application.rb:300:in `initialize!'
    from E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config/environment.rb:5:in `<top (required)>'
    from E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config.ru:3:in `require'
    from E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config.ru:3:in `block in <main>'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
    from E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config.ru:in `new'
    from E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config.ru:in `<main>'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `eval'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:49:in `new_from_string'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/builder.rb:40:in `parse_file'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/server.rb:277:in `build_app_and_options_from_config'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/server.rb:199:in `app'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands/server.rb:50:in `app'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.5.2/lib/rack/server.rb:314:in `wrapped_app'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands/server.rb:130:in `log_to_stdout'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands/server.rb:67:in `start'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands/commands_tasks.rb:81:in `block in server'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands/commands_tasks.rb:76:in `tap'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands/commands_tasks.rb:76:in `server'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
    from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.1.8/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

If I don't start the server but call rake routes I get the following error: 如果我不启动服务器但调用rake routes ,则会出现以下错误:

rake aborted!
NameError: uninitialized constant API
E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config/routes.rb:3:in `block in <top (required)>'
E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config/routes.rb:1:in `<top (required)>'
C:in `execute_if_updated'
E:/Users/Robert/Documents/Rubymine Projects/WarframeApi/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => routes => environment
(See full trace by running task with --trace)

Suggestions? 建议?


Edits below 编辑如下

Application.rb application.rb中

require File.expand_path('../boot', __FILE__)

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module WarframeApi
  class Application < Rails::Application

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

Routes.rb 的routes.rb

Rails.application.routes.draw do
    mount API::Root => '/'
end

The api files are located in the ./app/api (as suggested as alternative location in the tutorial). api文件位于./app/api中(如教程中的替代位置所示)。 Here is the file structure for completeness: 以下是完整性的文件结构:

  • app 应用
    • api API
      • root.rb root.rb
      • v1 V1
        • authors.rb authors.rb
        • posts.rb posts.rb
        • root.rb root.rb

Change your root.rb into this: 将root.rb更改为:

class Root < Grape::API
  prefix 'api'
  mount V1::Root
  # mount V2::Root (next version)
end

Or , change your directory structure into this: 或者 ,将目录结构更改为:

app > api > api > root.rb

Rails is looking for api folder as you are using module API . 当你使用module API Rails正在寻找api文件夹。 But you have already auto loaded api folder in application.rb , so you need another api folder if you keep your root.rb as it is. 但是你已经在application.rb中自动加载了api文件夹,所以你需要另外一个api文件夹,如果保持你的root.rb原样。

I solved this by changing in the config/routes.rb: 我通过更改config / routes.rb解决了这个问题:

mount V1::Root => "/" mount V1 :: Root =>“/”

to.. 至..

mount Root => "/api" mount Root =>“/ api”

You just need create another directory structure 您只需要创建另一个目录结构

  • app 应用

    • api API

      • api API

        • v1 V1

          • authors.rb authors.rb
          • posts.rb posts.rb
          • root.rb root.rb
        • root.rb root.rb

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ActiveShipping和Grape(Rails)-未初始化的常量API :: V1 :: Shippings :: ActiveShipping - ActiveShipping and Grape (Rails) - uninitialized constant API::V1::Shippings::ActiveShipping 为什么尝试将葡萄与Rails结合使用时会出现“未初始化的常量API”失败的情况? - Why does trying to use Grape with Rails fail with “uninitialized constant API”? Rails API,Cloudinary:未初始化的常量CLOUDINARY_CLOUD_NAME(NameError) - Rails API, Cloudinary: uninitialized constant CLOUDINARY_CLOUD_NAME (NameError) Rails Grape API 包含模块 - Zeitwerk::NameError - 预期文件定义常量,但没有: - Rails Grape API include module - Zeitwerk::NameError - expected file to define constant, but didn't: Rails - NameError - 未初始化的常量 - Rails - NameError - uninitialized constant Rails:NameError:未初始化的常量 - Rails: NameError: uninitialized constant Rails应用中未初始化的常量Api - uninitialized constant Api in Rails app 使用RoR的Meetup API。 获取NameError:在Rails控制台中未初始化的常量事件 - Meetup API using RoR. Getting NameError: uninitialized constant Event in the rails console Rails NameError(未初始化的常量注册): - Rails NameError (uninitialized constant Registration): Rails未初始化的常量RelationshipController(NameError) - Rails uninitialized constant RelationshipController (NameError)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM