2011-11-24 13 views
5

मैं 2.1 से रेल 3 (एक सफल मध्यवर्ती 2.3.11 चरण के माध्यम से) से पुराने रेल और पोस्टग्रेएसक्यूएल ऐप को अपग्रेड करने के बीच में हूं।यूनिकॉर्न! और PostgreSQL

आखिरकार, जब मुझे सभी रुपेक्स आसानी से चल रहे थे, तो मैंने Mongrel 1.2.0.pre2 स्थापित किया और इसे ऊपर चलाकर चलाया - ठीक है। 100 समवर्ती उपयोगकर्ताओं के साथ जेएमटर टेस्ट केस भी ठीक हो गया।

लेकिन जब मैंने यूनिकॉर्न के साथ ऐसा करने की कोशिश की! सर्वर, यह ठीक काम करता है जब मैं इसे स्वयं उपयोग कर रहा हूं, लेकिन जब मैं इसे जेएमटर के साथ लोड करता हूं, तो यह इस समय से 100% त्रुटियां देना शुरू करता है, जहां जेएमटर लॉगिन पोस्ट करने का प्रयास करता है। एक ही समय है जब मैं कुछ विशेष पृष्ठ की जाँच में, यह मुझे इस तरह अजीब त्रुटियों देता है:

undefined method `eq' for nil:NilClass 

टर्मिनल पर (लेकिन केवल कुछ ही बार) मैं निम्नलिखित उत्पादन प्राप्त करें:

message type 0x43 arrived from server while idle 
message type 0x5a arrived from server while idle 
WARNING: there is already a transaction in progress 

संपादित करें: यह साझा PGconnect वस्तु के साथ एक मुद्दा हो रहा है, तो मैं पिछले पाठ

मैंने पाया PostgreSQL docs निर्दिष्ट करें कि कि PGconn वस्तु साझा नहीं किया जाना चाहिए में से कुछ को हटा दिया समवर्ती अनुरोध करने वाले धागे के बीच।

यूनिकॉर्न है! या एआर PGconn ऑब्जेक्ट में विभिन्न धागे से अनुरोध मिश्रण?

Database.yml:

allow_concurrency: true 

unicorn.conf:

worker_processes 8 
working_directory "/full/path/to/app" 
listen '/tmp/app.sock', :backlog => 512 
timeout 30 
pid "/full/path/to/app/tmp/pids/puppetmaster_unicorn.pid" 

preload_app true 
    if GC.respond_to?(:copy_on_write_friendly=) 
    GC.copy_on_write_friendly = true 
end 

चश्मा:

    production: 
        adapter: postgresql 
        encoding: unicode 
        database: *** 
        username: *** 
        password: *** 
        host: 127.0.0.1 
    

    मैं भी कोई लाभ नहीं हुआ इस जोड़ने की कोशिश की

  • रेल 3.0.6 (तैनाती एनवी के कारण)
  • यूनिकॉर्न! 4.1.1
  • Nginx 1.0.5
  • स्नातकोत्तर मणि 0.11.0
  • PostgreSQL 9.0.4
  • मैक ओएस एक्स 10.7.2

रेल तो संस्करण, अपराधी होना चाहिए निश्चित रूप से मैं नवीनतम में अपग्रेड कर सकता हूं। मैंने अभी सेवा प्रदाता के साथ शुरू किया है।

+0

आप unicorn.rb में कितने गेंडा कार्यकर्ताओं बना सकता हूँ? क्या समय सीमा? – stephenmurdoch

+0

मैंने unicorn.conf – Laas

उत्तर

7

प्रक्रियाओं के बीच डेटाबेस कनेक्शन साझा नहीं करना महत्वपूर्ण है। जब आप preload_app रेल के साथ रेल चलाते हैं तो यूनिकॉर्न मास्टर कार्यकर्ताओं को फंसे करने से पहले एआर कनेक्शन स्थापित करेगा। उदाहरण unicorn.conf.rb में पहले_फोर हुक में एआर कनेक्शन डिस्कनेक्ट करने की अनुशंसा है। एआर स्वचालित रूप से एक नया कनेक्शन फिर से स्थापित करेगा क्योंकि प्रत्येक कार्यकर्ता को इसे पोस्ट-फोर्क की आवश्यकता होती है। http://unicorn.bogomips.org/examples/unicorn.conf.rb से

अंश:

before_fork do |server, worker| 
    # the following is highly recomended for Rails + "preload_app true" 
    # as there's no need for the master process to hold a connection 
    defined?(ActiveRecord::Base) and 
    ActiveRecord::Base.connection.disconnect! 
    # ... 
end 
+0

के साथ अपना प्रश्न अपडेट किया हां, मैंने यह भी पाया कि यूनिकॉर्न मेलिंग-सूची से मदद के साथ, लेकिन मेरा जवाब अपडेट करना भूल गया। मैं आपके लिए यह करने के लिए आपको अंक प्रदान करता हूं। धन्यवाद। – Laas

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