2012-05-31 12 views
6

मैं इन समस्याओं को हल करने के लिए कुछ घंटे बिताता हूं लेकिन कुछ भी नहीं पहुंच पाया। नेट पर इस समस्या के बारे में कई विषय हैं लेकिन उनमें से कोई भी इसे हल करने के लिए एक पूर्ण बात नहीं कहता है।पोस्टग्रेस्क्ल और डीजेंगो - यूनिक्स डोमेन सॉकेट

मैं सिर्फ आदेश मेरा Django परियोजना पर इसका इस्तेमाल करने में PostgreSQL स्थापित।

DATABASES = { 
    "default": { 
     "ENGINE": "django.db.backends.postgresql_psycopg2", # Add "postgresql_psycopg2", "postgresql", "mysql", "sqlite3" or "oracle". 
     "NAME": "name",      # Or path to database file if using sqlite3. 
     "USER": "postgres",        # Not used with sqlite3. 
     "PASSWORD": "pass",       # Not used with sqlite3. 
     "HOST": "",        # Set to empty string for localhost. Not used with sqlite3. 
     "PORT": "",        # Set to empty string for default. Not used with sqlite3. 
    } 
} 

यह मेरी settings.py है और त्रुटि है कि

could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 

था किसी को भी इसके बारे में एक समाधान है?

+0

आपका 'होस्ट' और 'पोर्ट' खाली क्यों है? यदि आप स्थानीय रूप से अपना django सर्वर चला रहे हैं, तो आपको कम से कम 'HOST' निर्दिष्ट करना होगा: 'localhost' – stalk

+0

आपका सिस्टम और संस्करण क्या है? आपने Postgresql - स्रोत से, वितरण पैकेज से या इंस्टॉलर से कैसे स्थापित किया? क्या आपने जांच की है कि पोस्टग्रेस सेवा वास्तव में चल रही है? पोस्टग्रेस सॉकेट कहां है - '/ var/run/postgresql/.s.PGSQL.5432' या'/tmp/.s.PGSQL.5432' या किसी अन्य स्थान पर। क्या आप 'psql' का उपयोग कर कनेक्ट करने में सक्षम हैं। काम के कुछ घंटों के लिए आप काम करने के लिए ज्यादा जानकारी प्रदान नहीं करते हैं। – Tometzky

+0

डेबियन 6। मेजबान और बंदरगाह खाली है क्योंकि मैं स्थानीयहोस्ट पर हूं इसे भरने की कोई आवश्यकता नहीं है – user1407540

उत्तर

15

आपको पोस्टग्रेस सॉकेट ढूंढने की आवश्यकता है। मुख्य पोस्टग्रेस प्रक्रिया पिड (ps auxw | grep postgres) देखें और इसके खुले यूनिक्स सॉकेट (lsof -p [PID_OF_POSTGRES_PROCESS] | grep unix) सूचीबद्ध करें। settings.py में HOST विकल्प पर यह पथ लिखें।

वितरण पैकेज से पोस्टग्रेर्स स्थापित करना (apt-get install postgresql) बहुत आसान होगा (उदाहरण के लिए settings.py में खाली HOST काम करेगा) और सुरक्षित होगा क्योंकि आपका वितरण आपके लिए सुरक्षा अपडेट इंस्टॉल करेगा।

+3

इसके अलावा, 'lsof' के विकल्प के रूप में, मानक तरीका' postgresql.conf' सर्वर कॉन्फ़िगरेशन फ़ाइल की 'unix_socket_directory' प्रविष्टि को देखना होगा। –

+0

धन्यवाद। यह काम करता हैं। apt-get postgresql स्थापित करें postgresql के पुराने संस्करण स्थापित करता है। मैंने क्या किया है कि मैंने अभी आधिकारिक साइट से 9.1 स्थापित किया है। apt-get postgresql इंस्टॉल करें जहां django होस्ट करता है लेकिन मैनुअल इंस्टॉल इसे एक अलग निर्देशिका में स्थापित करें। – user1407540

+2

नवीनतम संस्करण की आवश्यकता एक आम समस्या है जो अधिकांश प्रशासक [बैकपोर्ट्स] (http://backports-master.debian.org/) का उपयोग करके संभालना पसंद करते हैं। स्वचालित उन्नयन जैसे अन्य लाभों में से 9.1 के बैकपोर्ट ने उन पथों पर लाइब्रेरी/सर्वर विसंगति से बचा होगा जिन्हें आपको यहां हल करना था। –

11

यहाँ एक और संभावना है: यदि आप किसी मौजूदा संस्करण से अधिक PostgreSQL का एक नया संस्करण स्थापित है, संस्थापक यह एक गैर मानक पोर्ट संख्या आवंटित हो सकता है।

Django PostgreSQL बंदरगाह 5432. आप यूनिक्स सॉकेट का उपयोग कर रहे यहां तक ​​कि अगर, सॉकेट तो पोर्ट संख्या यह अभी भी मायने रखती है के नाम पर है पर सुनने की उम्मीद! लाइन port = nnnn के लिए

चेक /etc/postgresql/<version>/main/postgresql.conf। यदि वह संख्या 5432 नहीं है, तो यह आपकी समस्या है। एक अन्य संकेतक यह है कि /var/run/postgresql में आपकी सॉकेट फ़ाइल को गैर-मानक पोर्ट नंबर का उपयोग करके .s.PGSQL.5433 जैसे कुछ कहा जाएगा।

इसे ठीक करने के लिए, आप postgresql.conf में पोर्ट संख्या संपादित कर सकते हैं या तो डिफ़ॉल्ट (5432) का उपयोग करने, या यह एक गैर मानक पोर्ट नंबर पर चलाने के लिए अगर आप की जरूरत है, तो अपने Django settings.py में DATABASE_PORT = 'nnnn' निर्धारित किया है।

सूचक के लिए Erik Forsberg को धन्यवाद!

2

समकालीन फेडोरा सिस्टम पर, एक निजी temp निर्देशिका सुविधा जोड़ा गया है जो इस लक्षण का कारण बन जाएगा। https://fedoraproject.org/wiki/Features/ServicesPrivateTmp

यह सुविधा वेब ऐप्स को सिस्टम/tmp निर्देशिका से अलग एक tmp निर्देशिका का उपयोग करने का कारण बनती है जहां डिफ़ॉल्ट PostgreSQL डोमेन सॉक स्थित है।

फेडोरा पर अपाचे-httpd के लिए इस सुविधा के लिए systemd निर्देश बदलने के लिए, फ़ाइल /usr/lib/systemd/system/httpd.service को संपादित करने और बदलने के PrivateTmp=truePrivateTmp=false

वैकल्पिक रूप से करने के लिए, आप डोमेन सॉकेट का उपयोग कर इस समस्या से बचने के लिए बच सकते हैं।

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