2011-12-26 22 views
56

का उपयोग करते समय डेटाबेस बनाने में असमर्थ है, मैं अपने आवेदन के लिए हेरोकू का उपयोग कर रहा हूं और इसे PostgreSQL की आवश्यकता है लेकिन आप अभी भी विकास के लिए SQLite3 का उपयोग कर सकते हैं। चूंकि हेरोोकू ने दो अलग-अलग डेटाबेस होने के खिलाफ दृढ़ता से सलाह दी है, इसलिए मैंने विकास के लिए PostgreSQL में बदलने का निर्णय लिया है। मैंने gem pg स्थापित किया और विंडोज इंस्टालर प्राप्त करने के लिए आधिकारिक PostgreSQL साइट पर भी गया और मेरा database.yml भी बदल दिया। स्थापना के दौरान इसे PostgreSQL के लिए एक पासवर्ड की आवश्यकता है इसलिए मैंने एक बनाया। मुझे फ़ाइल को md5 से trust का उपयोग करने से पहले डेटाबेस को बनाने का प्रयास करते समय fe_sendauth: no password supplied को बदलना था।भूमिका मौजूद नहीं है और PostgreSQL

# TYPE DATABASE  USER   ADDRESS     METHOD 

# IPv4 local connections: 
host all    all    127.0.0.1/32   trust # was md5 
# IPv6 local connections: 
host all    all    ::1/128     trust # was md5 
# Allow replication connections from localhost, by a user with the 
# replication privilege. 
#host replication  postgres  127.0.0.1/32   trust 
#host replication  postgres  ::1/128     trust 

कि हालांकि से छुटकारा पाने के बाद, अब मैं इस मिल:

$ rake db:create 
(in C:/app) 
FATAL: role "User" does not exist 
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"utf8", 
"database"=>"app_test", "pool"=>5, "username"=>nil, "password"=>nil} 

मैं अभी भी अपने development.sqlite3 और text.sqlite3 वर्तमान की क्या ज़रूरत है, कि इस मुद्दे को हो सकता है? क्या किया जाना चाहिए? https://gist.github.com/1522188

उत्तर

118

अपने database.yml करने के लिए एक उपयोगकर्ता नाम जोड़ें, साथ ही उपयोगकर्ता नाम के रूप में अपने आवेदन के नाम (या नाम किसी भिन्न रूप) का उपयोग हो सकता है, मैं एक प्लेसहोल्डर के रूप app_name का उपयोग करेंगे:

यहाँ मेरा पूरा सार है:

development: 
    adapter: postgresql 
    encoding: utf8 
    database: app_development 
    pool: 5 
    username: app_name 
    password: 

फिर psql.exe का उपयोग कर PostgreSQL के अंदर (उर्फ "भूमिका") उपयोगकर्ता बनाने:

$ psql -d postgres 
postgres=# create role app_name login createdb; 
postgres=# \q 

पहली पंक्ति आपके टर्मिनल में है, अगले दो psql के अंदर हैं। फिर अपने rake db:create करें।

User उपयोगकर्ता संभवतः एक डिफ़ॉल्ट लेकिन PostgreSQL में तो आप मामले को संरक्षित करने के लिए यह उद्धृत करने के लिए यदि आप एक उपयोगकर्ता नाम के रूप User उपयोग करना चाहता था होगा अन्य प्रयोजनों के लिए user is already taken है:

postgres=# create role "User" login createdb; 

तुम वैसे भी एक उपयोगकर्ता प्रति आवेदन बनाने से बेहतर है।

आपमें प्रविष्टि के लिए भी इसी तरह की चीजें करना चाहेंगे।

+1

यह मुझे 'psql.exe' के अंदर आने नहीं दे रहा है। जब मैं इसे खोलने का प्रयास करता हूं, तो विंडो आती है और फिर स्वचालित रूप से बंद हो जाती है, इसलिए मैंने cmd प्रॉम्प्ट पर जाने की कोशिश की और 'c: \ Program Files .. \ .. \ bin> psql.exe> ​​psql में टाइप किया: FATAL: एक बार फिर 'FATAL' प्राप्त करने' की भूमिका "उपयोगकर्ता" मौजूद नहीं है। कोई विचार? – LearningRoR

+1

@wrbg: आपने स्थापना के दौरान 'postgres' उपयोगकर्ता बनाया है, है ना? यदि आपको पासवर्ड चाहिए तो 'psql -d postgres -U postgres -W'' की आवश्यकता है, तो 'psql -d postgres -U postgres' आज़माएं। –

+0

यह किसी उपयोगकर्ता के लिए स्थापना के दौरान संकेत नहीं दिया गया था। मुझे पुनः स्थापित करने में देखने दो। – LearningRoR

6

PostgreSQL आपके खाते (लॉगिन) नाम के साथ डेटाबेस बनाने का प्रयास करेगा यदि username आपके config/database.yml में निर्दिष्ट नहीं है। ओएस एक्स और लिनक्स पर आप देख सकते हैं कि यह whoami के साथ कौन है। ऐसा लगता है कि आप विंडोज का उपयोग कर रहे हैं।

समाधान एक: Create a PostgreSQL user कि व्यक्ति की तलाश में मेल खाता है। उदाहरण के लिए

createuser --superuser some_user 

समाधान बी: ​​ बदलें स्पष्ट रूप से एक उपयोगकर्ता नाम as shown in mu's answer की स्थापना करके डीबी उपयोगकर्ता।

+0

Youdaman! यह एकमात्र ऐसा था जो मेरे लिए काम करता था। –

+0

क्या इसे वास्तव में '- सुपरस्यूसर' की आवश्यकता है या '-d' पर्याप्त है? – Meekohi

4

यदि आपके पास पोस्टग्रेर्स नामक पोस्टग्रेर्स के लिए आपकी मशीन पर एक विशिष्ट खाता/उपयोगकर्ता है उदाहरण के लिए पोस्टग्रेस कहा जाता है।

फिर इस आदेश को निष्पादित करने से आपके लिए भूमिका का नाम दर्ज करने के लिए एक संकेत मिलेगा।

sudo -u postgres createuser --interactive 

फिर

rake db:create 

कर काम करना चाहिए!

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