Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 自动加载常量Api::V1::Xxxxx::Xxxxxx时检测到循环依赖项_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 自动加载常量Api::V1::Xxxxx::Xxxxxx时检测到循环依赖项

Ruby on rails 自动加载常量Api::V1::Xxxxx::Xxxxxx时检测到循环依赖项,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的请求在开发中很有效。 我使用capistrano进行部署,并使用Ruby 2.1.5和Rails 4.1.5运行rbenv 请原谅我,我花了半天的时间试图让它在生产中发挥作用,但不幸失败了,我求助于诸神,希望能有一个奇迹 我正在尝试开发一个版本化的api,在切换到Rails 4.x.x之前,这一切都已实现,但下面是堆栈跟踪: App 10385 stdout: RuntimeError (Circular dependency detected while autoloading const

我的请求在开发中很有效。 我使用capistrano进行部署,并使用Ruby 2.1.5和Rails 4.1.5运行rbenv

请原谅我,我花了半天的时间试图让它在生产中发挥作用,但不幸失败了,我求助于诸神,希望能有一个奇迹

我正在尝试开发一个版本化的api,在切换到Rails 4.x.x之前,这一切都已实现,但下面是堆栈跟踪:

App 10385 stdout: RuntimeError (Circular dependency detected while autoloading constant Api::V1::Activities::ReportsController):
App 10385 stdout:   activesupport (4.1.5) lib/active_support/dependencies.rb:478:in `load_missing_constant'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/dependencies.rb:180:in `const_missing'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/inflector/methods.rb:240:in `const_get'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/inflector/methods.rb:240:in `block in constantize'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/inflector/methods.rb:236:in `each'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/inflector/methods.rb:236:in `inject'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/inflector/methods.rb:236:in `constantize'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/dependencies.rb:552:in `get'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/dependencies.rb:583:in `constantize'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:78:in `controller_reference'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:68:in `controller'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:46:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:45:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/journey/router.rb:71:in `block in call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/journey/router.rb:59:in `each'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/journey/router.rb:59:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:678:in `call'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:186:in `call!'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:164:in `call'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:186:in `call!'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:164:in `call'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/builder.rb:59:in `call'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:186:in `call!'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:164:in `call'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:186:in `call!'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/strategy.rb:164:in `call'
App 10385 stdout:   omniauth (1.2.2) lib/omniauth/builder.rb:59:in `call'
App 10385 stdout:   warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
App 10385 stdout:   warden (1.2.3) lib/warden/manager.rb:34:in `catch'
App 10385 stdout:   warden (1.2.3) lib/warden/manager.rb:34:in `call'
App 10385 stdout:   rack (1.5.2) lib/rack/etag.rb:23:in `call'
App 10385 stdout:   rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'
App 10385 stdout:   rack (1.5.2) lib/rack/head.rb:11:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/flash.rb:254:in `call'
App 10385 stdout:   rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
App 10385 stdout:   rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/cookies.rb:560:in `call'
App 10385 stdout:   activerecord (4.1.5) lib/active_record/query_cache.rb:36:in `call'
App 10385 stdout:   activerecord (4.1.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/callbacks.rb:82:in `run_callbacks'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
App 10385 stdout:   railties (4.1.5) lib/rails/rack/logger.rb:38:in `call_app'
App 10385 stdout:   railties (4.1.5) lib/rails/rack/logger.rb:20:in `block in call'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/tagged_logging.rb:68:in `block in tagged'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/tagged_logging.rb:26:in `tagged'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/tagged_logging.rb:68:in `tagged'
App 10385 stdout:   railties (4.1.5) lib/rails/rack/logger.rb:20:in `call'
App 10385 stdout:   actionpack (4.1.5) lib/action_dispatch/middleware/request_id.rb:21:in `call'
App 10385 stdout:   rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
App 10385 stdout:   rack (1.5.2) lib/rack/runtime.rb:17:in `call'
App 10385 stdout:   activesupport (4.1.5) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
App 10385 stdout:   action
App 10385 stdout: pack (4.1.5) lib/action_dispatch/middleware/static.rb:64:in `call'
App 10385 stdout:   rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
App 10385 stdout:   railties (4.1.5) lib/rails/engine.rb:514:in `call'
App 10385 stdout:   railties (4.1.5) lib/rails/application.rb:144:in `call'
App 10385 stdout:   /usr/local/rbenv/versions/1.9.3-p448/lib/ruby/gems/1.9.1/gems/passenger-4.0.43/lib/phusion_passenger/rack/thread_handler_extension.rb:74:in `process_request'
App 10385 stdout:   /usr/local/rbenv/versions/1.9.3-p448/lib/ruby/gems/1.9.1/gems/passenger-4.0.43/lib/phusion_passenger/request_handler/thread_handler.rb:141:in `accept_and_process_next_request'
App 10385 stdout:   /usr/local/rbenv/versions/1.9.3-p448/lib/ruby/gems/1.9.1/gems/passenger-4.0.43/lib/phusion_passenger/request_handler/thread_handler.rb:109:in `main_loop'
App 10385 stdout:   /usr/local/rbenv/versions/1.9.3-p448/lib/ruby/gems/1.9.1/gems/passenger-4.0.43/lib/phusion_passenger/request_handler.rb:448:in `block (3 levels) in start_threads'
摘自routes.rb:

namespace :api, defaults: { format: :json } do
    scope module: :v1, constraints: ApiConstraints.new(version: 1) do
      scope 'me', as: :my, defaults: { format: :json, user_id: 'me' } do
        get 'transcript', :controller => 'users', :action => 'transcript', defaults: { format: :pdf }
        resources :attendance, as: :attendance, :controller => 'users/attendance' do
          post 'start', :controller => 'users/attendance'
          post 'complete', :controller => 'users/attendance'
          get 'certificate', :controller => 'users/attendance', defaults: { format: :pdf }

          resources :assessments, as: :assessment, :controller => 'users/attendance/assessments' do
            post 'answer', :controller => 'users/attendance/assessments'
            post 'complete', :controller => 'users/attendance/assessments', :action => 'complete'
          end
        end
        post 'studies', :controller => 'users', :action => 'studies'
        post 'study', :controller => 'users', :action => 'study'
        post 'unstudy', :controller => 'users', :action => 'unstudy'
      end

      resources :me

      resources :users, defaults: { format: :json } do
        resources :attendance, :controller => "users/attendance"
      end

      # scope 'system', :as => :system do
      #   match 'scripts/:action', via: [:get], :controller => 'system/scripts'
      # end
      get 'articles/latest'
      resources :articles, defaults: {format: :json} do

      end
      resources :activities, :path => "activities", :controller => "activities", defaults: {format: :json} do
        # resources :agendas, :path => "agenda", :controller => "activities/agenda"
        # resources :activity_notes, :path => "notes", :controller => "activities/notes"
        # resources :activity_credits, :path => "credits", :controller => "activities/credits"
        # resources :activity_faculties, :path => "faculty", :controller => "activities/faculty"
        # resources :activity_committees, :path => "committee", :controller => "activities/committee"
        # resources :activity_finbudget, :path => "budget", :controller => "activities/budget"
        # resources :activity_finfees, :path => "fees", :controller => "activities/fees"
        # resources :activity_finledgers, :path => "ledger", :controller => "activities/ledger"
        # resources :activity_finsupports, :path => "support", :controller => "activities/support"
        # resources :attendees, :path => "participants", :controller => "activities/participants"
        # resources :activity_application, :path => "application", :controller => "activities/application"
        # resources :activity_pubgeneral, :path => "publish_info", :controller => "activities/publish_info"
        # resources :activity_pubcomponent, :path => "components", :controller => "activities/components"
        match 'reports/:action', via: [:get], :controller => "activities/reports", :defaults => { :format => 'pdf' }
      end
    end
  end
控制器结构为: 应用程序 -原料药 --v1 ---活动\u controller.rb(扩展BaseController) ---base_controller.rb(扩展ActionController::base) ---活动 ----报告_controller.rb(扩展BaseController)

在api/v1/activities/reports_controller.rb级别,我的文件的基本内容如下所示

module Api
  module V1
    class Activities::ReportsController < BaseController

    end
  end
end

它似乎喜欢它。。。但是我不喜欢它的布局,也不应该是那样的,我不认为…

好吧,我似乎已经解决了这个问题,而且由于这个错误在Rails世界中对于许多不同的问题似乎非常普遍,我将分享我的错误,尽管我认为它可能对谷歌有价值

话虽如此

我相信我的问题与rails应用程序的配置有关。 我不确定我对Rails的了解程度是否足以理解
config.eager\u load
的基本工作原理和影响,但将其设置为false用于生产解决了我的问题

因此,在
config/environments/production.rb
中,我的应用程序崩溃了

如果有人想补充为什么会发生这种情况,或者在评论中更好地理解这一点,我可以更新答案

再次感谢StackOverflow社区,并一直在那里


向前推感觉很好。

您可能需要更改:

class Activities::ReportsController < BaseController
end

rails自动加载的方式在两者之间存在一些细微的差异,第二种方式似乎更容易解决。如果你感兴趣的话。

你可能会把你的型号名称用复数形式表示,但我不确定这是真的,但我会查一查。我的主要问题是,当它们是相同的Ruby版本和Rails版本时,环境之间的差异是什么。。。对我来说似乎有点奇怪。您需要保持
eager\u load
设置不变,因为您不想让生产在动态加载类时浪费时间。
class Activities::ReportsController < BaseController
end
class Activities
  class ReportsController
  end
end