2014-12-10 18 views
0

我的请求在开发中工作正常。 我正在部署capistrano,并运行rbenv与Ruby 2.1.5和Rails 4.1.5。自动载入常量时检测到循环依赖项Api :: V1 :: Xxxxx :: Xxxxxx

原谅我,经过一天的半天试图让这个工作在生产和失败悲惨地我诉诸SO神希望奇迹。

我试图建立一个版本的API,而这一切的切换到Rails 4.XX之前的工作,但这里是堆栈跟踪:

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 

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中摘录

和控制器结构是: app -api -v1 --- activities_controller.rb(扩展BaseController) --- base_controller.rb(扩展ActionControl ler :: Base) --- activities ---- reports_controller.rb(extends BaseController)

我的文件在api/v1/activities/reports_controller.rb级别的基本信息如下所示。

module Api 
    module V1 
    class Activities::ReportsController < BaseController 

    end 
    end 
end 

如果我拉了比赛路线resources :activities do之外,使它看起来像这样:

match 'activities/:activity_id/reports/:action', via: [:get], :controller => "activities/reports", :defaults => { :format => 'pdf' } 

它似乎喜欢它......但我不喜欢那怎么布局和它不应该是这样我不认为...

+0

你可能有你的型号名称复数,它需要单数 – 2014-12-10 21:52:16

+0

我不相信就是这样,但我会检查它。 – 2014-12-11 02:33:24

+0

我的一件大事就是为什么环境之间的差异时,它们是相同版本的Ruby和Rails版本...似乎很奇怪我。 – 2014-12-11 02:35:11

回答

0

好吧,我似乎已经解决了它,因为这个错误是在Rails世界看起来非常通用的一些不同的问题 - 尽管我认为这可能对Google员工很有价值。

这就是说。

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

因此,在config/environments/production.rb我有config.eager_load = true这是崩溃我的应用程序。

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

再次感谢StackOverflow社区,并始终在那里。

推进感觉很好。

+0

你想保持'eager_load'设置不变,因为你不想让你的产品在运行中浪费时间加载类。 – lobati 2014-12-29 23:32:41

0

您可能需要更改:

class Activities::ReportsController < BaseController 
end 

到:

class Activities 
    class ReportsController 
    end 
end 

有在路上轨一些细微的差别确实在两者之间自动加载,而且似乎第二个是更容易一些解决。More info here如果你有兴趣。

相关问题