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