2015-05-15 12 views
7

मेरे पास एक रेल परियोजना है कि, हर समय और फिर, इस अपवाद को गैर-पुनरुत्पादित तरीके से उत्पादन में फेंकता है। सब कुछ विकास और परीक्षण में स्पष्ट रूप से काम करता है, और स्पष्ट रूप से उत्पादन में भी, लेकिन अपवाद नोटिफ़ायर प्रत्येक कुछ हफ्तों में मुझे इस अपवाद के साथ ईमेल करता है ...इंटरमीटेंट "निरंतर स्वत: लोड होने पर सर्कुलर निर्भरता"

मुझे नहीं पता कि क्या हो रहा है, इसलिए मैं जितनी अधिक जानकारी डंप करने जा रहा हूं मेरे पर्यावरण के बारे में मुझे लगता है कि यह प्रासंगिक है, उम्मीद है कि इनमें से कुछ समस्या निवारण में मदद करेंगे। (। यानी नहीं JRuby)

  • रूबी 2.1.5
  • रेल 4.2.1
  • Heroku में चल रहा है, नियमित रूप से रूबी दुभाषिया के साथ

पूर्ण त्रुटि है:

"Circular dependency detected while autoloading constant DeferredUpdatesHelper" 

DeferredUpdatesHelperlib/deferred_updates_helper.rb में परिभाषित एक मॉड्यूल है, जैसे:

module DeferredUpdatesHelper 
    def self.something_something(params) 
    end 
end 

मैं इस मॉड्यूल की किसी भी निर्भरता के बारे में नहीं सोच सकता। यह बहुत आसान है, और जहां तक ​​मैं कह सकता हूं, इसकी सभी जरूरतों को एक रेडिसपूल नामक वैश्विक चर है, इसलिए सुनिश्चित नहीं है कि एक परिपत्र निर्भरता कैसे हो सकती है ...

यह मॉड्यूल मेरे मॉडल में से एक से उपयोग किया जाता है: models/user.rb

class User < ActiveRecord::Base 
    def self.process_deferred_something 
    DeferredUpdatesHelper.something_something(params) do 
     # do stuff 
    end 
    end 
end 

विधि एक ActiveJob से कहा जाता है कि:

class SomeJob < ActiveJob::Base 
    queue_as :default 

    def perform 
    User.process_deferred_something 
    end 
end 

जो एक Sidekiq प्रक्रिया के अंदर निष्पादित किया जाता है, और यह पूरी तरह से खुशी से हर 10 मिनट में हर अब चलाता है, सिवाय इसके कि और फिर मैं से एक मिल ये ...

कोई भी require कथन कहीं भी नहीं है, या कम से कम इन उल्लिखित फ़ाइलों में से किसी एक में ... और जैसा कि बताया गया है, देव में सबकुछ बस काम करता है।

स्टैक ट्रेस: ​​

/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:492:in `load_missing_constant' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:184:in `const_missing' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:526:in `load_missing_constant' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:184:in `const_missing' 
/app/app/models/user.rb:93:in `process_deferred_something' 
/app/app/jobs/some_job.rb:5:in `perform' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/execution.rb:32:in `block in perform_now' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:117:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:117:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:505:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:505:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:343:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:343:in `block (2 levels) in simple' 
/app/vendor/bundle/ruby/2.1.0/gems/newrelic_rpm-3.11.2.286/lib/new_relic/agent/instrumentation/active_job.rb:46:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/newrelic_rpm-3.11.2.286/lib/new_relic/agent/instrumentation/active_job.rb:46:in `perform' 
/app/vendor/bundle/ruby/2.1.0/gems/newrelic_rpm-3.11.2.286/lib/new_relic/agent/instrumentation/active_job.rb:20:in `block (3 levels) in <top (required)>' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:441:in `instance_exec' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:441:in `block in make_lambda' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:342:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:342:in `block in simple' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:497:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:497:in `block in around' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:505:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:505:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:343:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:343:in `block (2 levels) in simple' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/logging.rb:23:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/logging.rb:23:in `block (4 levels) in <module:Logging>' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/notifications.rb:164:in `block in instrument' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/notifications.rb:164:in `instrument' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/logging.rb:22:in `block (3 levels) in <module:Logging>' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/logging.rb:43:in `block in tag_logger' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/tagged_logging.rb:68:in `block in tagged' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/tagged_logging.rb:26:in `tagged' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/tagged_logging.rb:68:in `tagged' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/logging.rb:43:in `tag_logger' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/logging.rb:19:in `block (2 levels) in <module:Logging>' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:441:in `instance_exec' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:441:in `block in make_lambda' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:342:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:342:in `block in simple' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:497:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:497:in `block in around' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:505:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:505:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:92:in `_run_callbacks' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:776:in `_run_perform_callbacks' 
/app/vendor/bundle/ruby/2.1.0/gems/activesupport-4.2.1/lib/active_support/callbacks.rb:81:in `run_callbacks' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/execution.rb:31:in `perform_now' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/execution.rb:21:in `execute' 
/app/vendor/bundle/ruby/2.1.0/gems/activejob-4.2.1/lib/active_job/queue_adapters/sidekiq_adapter.rb:40:in `perform' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/processor.rb:75:in `execute_job' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/processor.rb:52:in `block (2 levels) in process' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:127:in `block in invoke' 
/app/lib/sidekiq_monitoring.rb:46:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:129:in `block in invoke' 
/app/vendor/bundle/ruby/2.1.0/gems/newrelic_rpm-3.11.2.286/lib/new_relic/agent/instrumentation/sidekiq.rb:33:in `block in call' 
/app/vendor/bundle/ruby/2.1.0/gems/newrelic_rpm-3.11.2.286/lib/new_relic/agent/instrumentation/controller_instrumentation.rb:353:in `perform_action_with_newrelic_trace' 
/app/vendor/bundle/ruby/2.1.0/gems/newrelic_rpm-3.11.2.286/lib/new_relic/agent/instrumentation/sidekiq.rb:29:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:129:in `block in invoke' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/server/active_record.rb:6:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:129:in `block in invoke' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/server/retry_jobs.rb:74:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:129:in `block in invoke' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/server/logging.rb:11:in `block in call' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/logging.rb:24:in `with_context' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/server/logging.rb:7:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:129:in `block in invoke' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:132:in `call' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/middleware/chain.rb:132:in `invoke' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/processor.rb:51:in `block in process' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/processor.rb:98:in `stats' 
/app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.3.3/lib/sidekiq/processor.rb:50:in `process' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `public_send' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `dispatch' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb:122:in `dispatch' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb:60:in `block in invoke' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb:71:in `block in task' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/actor.rb:357:in `block in task' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/tasks.rb:57:in `block in initialize' 
/app/vendor/bundle/ruby/2.1.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb:15:in `block in create' 

किसी भी विचार क्या चल रहा हो सकता है या मैं इसे कैसे ठीक कर सकते हैं?

+0

क्या आपने कभी यह पता लगाया कि इसे कैसे ठीक किया जाए? – Pwnna

+0

नहीं, अभी भी उत्पादन में, हर समय और फिर होता है ... –

+1

मेरे पास यह समस्या भी है। जब प्रक्रिया पुनरारंभ होती है तो मैंने कभी-कभी त्रुटियों से सहसंबंध किया है (यह केवल उसके दौरान होता है, लेकिन हर समय जरूरी नहीं)। क्या यह आपके लिए भी सच है? मुझे लगता है कि आप Rails42 का उपयोग कर रहे हैं, क्या आप जांच सकते हैं कि https://github.com/rails/rails/commit/ae07806858072cd66611c165d1eed2a113e639e5 आपकी शाखा में लागू है या नहीं? मैं अभी तक 42 तक अपग्रेड नहीं कर सकता, इसलिए मेरे पास यह पैच नहीं है। – Pwnna

उत्तर

2

परिपत्र निर्भरता त्रुटि संभवतः मुझे एक बहु-थ्रेडिंग समस्या की तरह लगता है।

तुम इतनी तरह eager_load_paths को lib जोड़ने की कोशिश कर सकते हैं:

config.eager_load_paths += ["#{config.root}/lib"]

जबकि उत्पादन वातावरण में क्षुधा उत्सुक config.eager_load! साथ डिफ़ॉल्ट रूप से भरी हुई हैं, lib से एक शामिल पथ नहीं है। कंसोल में Rails.configuration.eager_load_paths चलाकर आप अपने eager_load_paths को शामिल कर सकते हैं।

सुनिश्चित नहीं है कि यह आपकी समस्या हल करता है लेकिन यह केवल एकमात्र चीज है जो मेरे दिमाग में आई है। इसके अलावा यदि आप अब तक अपनी समस्या का समाधान करने में कामयाब रहे हैं तो मुझे समाधान पर एक अपडेट सुनना अच्छा लगेगा।

+0

यह मेरी समस्या को ठीक करती है। – Mio

संबंधित मुद्दे