2013-02-13 33 views
5

मैं अपने रेल ऐप में कुछ बदलावों में विलय कर रहा हूं, जिसमें देरी_बॉब मणि (जो अद्भुत दिखता है) को जोड़ना शामिल है। यह परीक्षण बाहर करने के लिए, मैं:रेक नौकरियां: काम "PGError: त्रुटि देता है: उपशीर्षक में अद्यतन/साझा करने के लिए चयन की अनुमति नहीं है"

  • भाग गया rails g delayed_job
  • भाग गया rake db:migrate, जो delayed_jobs तालिका
  • को पुन: प्रारंभ rails server (सिर्फ मामले में)
  • PostgreSQL सेवा (सिर्फ मामले में)
  • को पुन: प्रारंभ बनाया
  • भाग scripts/delayed_job start
  • देरी वाली नौकरियों को अर्जित करने के लिए कुछ कार्य किए गए

लेकिन कुछ भी नहीं हुआ:/मेरी नौकरियां देरी की नौकरियों की मेज में हैं, लेकिन locked_at शून्य है (जैसा कि last_error है)।

तो मैं rake jobs:work की कोशिश की है, जो एक अजीब Postgres त्रुटि दिया:
PGError: ERROR: SELECT FOR UPDATE/SHARE is not allowed in subqueries और एक निशान:

$ rake jobs:work 
[Worker(host:robert-vaio pid:21217)] Starting job worker 
rake aborted! 
PGError: ERROR: SELECT FOR UPDATE/SHARE is not allowed in subqueries 
: UPDATE "delayed_jobs" SET locked_at = '2013-02-13 19:53:46.803085', locked_by = 'host:robert-vaio pid:21217' WHERE id IN (SELECT id FROM "delayed_jobs" WHERE ((run_at <= '2013-02-13 19:53:46.792619' AND (locked_at IS NULL OR locked_at < '2013-02-13 15:53:46.792639') OR locked_by = 'host:robert-vaio pid:21217') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING * 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:1153:in `async_exec' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:1153:in `exec_no_cache' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:662:in `block in exec_query' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activesupport-3.2.12/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:661:in `exec_query' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:1248:in `select' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/querying.rb:38:in `block in find_by_sql' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/explain.rb:33:in `logging_query_plan' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/activerecord-3.2.12/lib/active_record/querying.rb:37:in `find_by_sql' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job_active_record-0.4.1/lib/delayed/backend/active_record.rb:63:in `reserve' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:258:in `reserve_and_run_one_job' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:187:in `block in work_off' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:186:in `times' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:186:in `work_off' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:151:in `block (4 levels) in start' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:150:in `block (3 levels) in start' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:60:in `call' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:60:in `block in initialize' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:65:in `call' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:65:in `execute' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:38:in `run_callbacks' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:149:in `block (2 levels) in start' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:148:in `loop' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:148:in `block in start' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/plugins/clear_locks.rb:7:in `call' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/plugins/clear_locks.rb:7:in `block (2 levels) in <class:ClearLocks>' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:78:in `call' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:78:in `block (2 levels) in add' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:60:in `call' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:60:in `block in initialize' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:78:in `call' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:78:in `block in add' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:65:in `call' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:65:in `execute' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/lifecycle.rb:38:in `run_callbacks' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/worker.rb:147:in `start' 
/home/robert/.rvm/gems/ruby-1.9.3-p327/gems/delayed_job-3.0.5/lib/delayed/tasks.rb:9:in `block (2 levels) in <top (required)>' 
Tasks: TOP => jobs:work 
(See full trace by running task with --trace) 

मैं समझ नहीं क्या गलत है - और अधिक आश्चर्यजनक रूप से, मैं किसी और को मिल सकता है इस सवाल से पूछना ....!

किसी भी मदद के लिए धन्यवाद!

+0

लंबी कहानी छोटी - मैंने 9.1 पोस्ट करने के लिए अपग्रेड किया और त्रुटि चली गई। – rmosolgo

उत्तर

5

पोस्टग्रेज़ अपडेट करने से भी मेरे लिए समस्या ठीक हो गई - और यह पुराने संस्करण पर वापस लॉक करने के लिए बेहतर लगता है। ऐसा नहीं है कि यह मेरा उत्तर है, लेकिन चूंकि आरमोसोल्गो ने अपने स्वयं के प्रश्न का उत्तर दिया है ऐसा लगता है कि यह प्रश्न ठीक से 'स्वीकृत उत्तर' स्थिति में जा सकता है।

+0

पोस्टग्रेज़ का कौन सा संस्करण आपने अपग्रेड किया था इसे काम कर लो? – Jonah

+1

9.2.4 शायद। यही वह है जो मैं अभी कर रहा हूं और मुझे तब से उन्नयन याद नहीं है। मुझे शायद यह भी ध्यान रखना चाहिए कि मैं इसे विंडोज़ पर चला रहा हूं। (कॉर्पोरेट परिस्थितियों ...) – elc

6

मुझे एक ही समस्या थी। मैं संस्करण 0.3.3 के लिए delayed_job_active_record के लिए मेरे Gemfile लॉक करके इस हल:

मणि 'delayed_job_active_record', '0.3.3'

गैर काम मणि संस्करण 0.4.1, जो 12 फरवरी को जारी किया गया था , 2012.

+0

मैं इस समाधान की पुष्टि कर सकता हूं।Gem 'delayed_job_active_record' संस्करण 4.0.0 और 0.4.4 प्रदर्शित छोटी गाड़ी व्यवहार, लेकिन मणि संस्करण 0.3.3 सही ढंग से कार्य करता है। मैं PostgresSQL 8.3.7 का उपयोग कर रहा हूँ। – Ichimonji10

+0

ग्रेट जो मेरे लिए काम करता है। आपने मेरा बहुत समय बचाया –

+0

संस्करण 0.3.3 के "delayed_job_active_record" का उपयोग करने के लिए, इसे active_record संस्करण < 4.0 & > 2.1 की आवश्यकता है। मैं Rails4 का उपयोग कर रहा हूं। कृपया अन्य विकल्प का कोई विचार ... – Prem

2

यह delayed_job के लिए एक पता है कि मुद्दा है, को देखने के https://github.com/collectiveidea/delayed_job_active_record/issues/33

delayed_job_active_record की एक शाखा है जो postgres 8.4 के साथ ठीक काम करता है और रेल 4.x के साथ संगत है नहीं है

gem 'delayed_job_active_record', :git => '[email protected]:panter/delayed_job_active_record.git' 

यह द्वारा समस्या का समाधान होता असफल प्रश्नों के बिना पोस्टग्रेस एसक्यूएल कॉल का उपयोग करना।

1

मैंने बीटी नील वुड्स प्रदान किए गए समाधान के साथ प्रयास किया लेकिन यह कुछ प्रमाणीकरण मुद्दों को दिखा रहा था, फिर मैंने इसमें थोड़ा बदलाव के साथ नीचे पंक्ति के साथ जोड़ने का प्रयास किया।

gem 'delayed_job_active_record', :git => 'git://github.com/panterch/delayed_job_active_record.git' 

यह बाहर काम करते हैं, अगर कोई यही समस्याएं आ रही है इस प्रयास करें।

धन्यवाद।