2013-06-11 24 views
10

Tôi biết có rất nhiều câu hỏi nổi xung quanh có liên quan đến các vấn đề tương tự, nhưng tôi nghĩ rằng tôi có một hương vị cụ thể chưa được giải quyết. Tôi đang cố gắng tạo cơ sở dữ liệu postgresql cục bộ của mình để tôi có thể phát triển địa phương ngoài việc đẩy vào Heroku.Cấu hình cơ sở dữ liệu postgresql để phát triển cục bộ ở Django khi sử dụng Heroku

Tôi đã tìm thấy câu trả lời cơ bản về cách để làm điều này, ví dụ (mà tôi nghĩ là một chút wee lỗi thời):

'#DATABASES = {'default': dj_database_url.config(default='postgres://fooname:[email protected]/dbname')}' 

Điều này giải quyết "ENGINE" không được cấu hình lỗi. Tuy nhiên, khi tôi chạy 'python manage.py syncdb' Tôi nhận được lỗi sau:

'OperationalError: FATAL: password authentication failed for user "foo" 
FATAL: password authentication failed for user "foo"' 

Điều này xảy ra cho tất cả các kết hợp tên người dùng/pass. Vì vậy, tên người dùng/mật khẩu ubuntu của tôi, tên người dùng/pass của tôi, v.v. Điều này cũng xảy ra nếu tôi chỉ cố gắng lấy ra thành phần Heroku và xây dựng nó cục bộ như thể tôi đang sử dụng postgresql trong khi làm theo hướng dẫn. Vì tôi chưa có cơ sở dữ liệu, các giá trị tên người dùng/giá trị chuyển tiếp đó là gì? Vấn đề chính xác là tôi cần phải tạo một cơ sở dữ liệu trước? Nếu thế thì sao?

Như một mặt lưu ý Tôi biết tôi có thể nhận được các db từ Heroku sử dụng quá trình này được nêu ở đây: Should I have my Postgres directory right next to my project folder? If so, how?

Nhưng giả sử tôi đã làm như vậy, nơi sẽ mới db sống, làm thế nào sẽ django biết làm thế nào để truy cập nó, và tôi sẽ có cùng một vấn đề người dùng/vượt qua?

Cảm ơn một nhóm.

+0

Bạn có thể đăng toàn bộ 'settings.py' không? –

+0

Như tôi đã nhớ, đối với các hệ điều hành nix, bạn phải có cho ban đầu ít nhất là người dùng có tên 'postgres' cho acess để postgres DB. Kinh nghiệm của tôi với PG bị giới hạn bởi Win, Ubunru và CentOS. Hãy thử thực thi trạng thái pg_ctl. Sau đó, xem liệu hệ điều hành của bạn có được chấp nhận các cuộc gọi thông qua giao thức TCP tới Postgres hay không; tiếp theo, kiểm tra cấu hình postgres pg_hba.conf cho các địa chỉ có thể chấp nhận được. Và cứ thế. Cách đơn giản nhất là hỏi Google: "PostgreSQL" [YourOSName] Và có, python không có bất kỳ quan hệ nào với PG như đối với các DBMS khác. – Abelisto

Trả lời

18

Giả sử bạn đã cài đặt postgres, hãy kết nối qua pgadmin hoặc psql và tạo người dùng mới. Sau đó, tạo cơ sở dữ liệu mới và với người dùng mới của bạn làm chủ sở hữu. Hãy chắc chắn rằng bạn có thể kết nối thông qua psql với người dùng mới vào cơ sở dữ liệu. sau đó bạn sẽ cần phải thiết lập một biến env trong tệp postactivate của bạn trong thư mục bin của virtualenv và lưu nó. Đây là những gì tôi có cho cơ sở dữ liệu:

export DATABASE_URL='postgres://{{username}}:{{password}}@localhost:5432/{{database}}' 

Chỉ cần lưu ý: thêm giá trị này vào hoạt động sau của bạn không làm bất cứ điều gì. Tệp không chạy khi lưu. Bạn sẽ cần phải chạy nó tại dấu nhắc $, hoặc đơn giản là hủy kích hoạt và kích hoạt virtualenv của bạn.

settings.py của bạn nên đọc từ var env này:

DATABASES = {'default': dj_database_url.config()} 

Sau đó bạn sẽ cấu hình Heroku với công cụ CLI họ để sử dụng cơ sở dữ liệu sản xuất của bạn khi triển khai. Một cái gì đó như:

heroku config:set DATABASE_URL={{production value here}} 

(nếu bạn không có công cụ CLI Heroku được cài đặt, bạn cần phải làm điều đó)

Nếu bạn cần phải tìm cách chính xác những gì mà giá trị mà bạn cần cho cơ sở dữ liệu sản xuất của bạn, bạn có thể lấy nó bằng cách đăng nhập vào tên miền phụ postgresql của heroku (tại thời điểm này đang được viết, nó là https://postgres.heroku.com/) và chọn db từ danh sách và nhìn vào giá trị "Connection Settings: URL".

Bằng cách này giá trị settings.py cùng của bạn sẽ hoạt động cho cả địa phương và sản xuất và bạn giữ cho tên người dùng/mật khẩu của bạn nằm ngoài tầm kiểm soát. Chúng chỉ là giá trị cấu hình env.

+0

Cảm ơn sự giúp đỡ của David. Tôi đã có thể thực hiện bước đầu tiên sau: http://www.cyberciti.biz/faq/howto-add-postgresql-user-account/. Bạn có thể đăng một ví dụ về việc thiết lập biến env, nó nên là gì không, và làm thế nào để làm cho settings.py đọc từ nó? Tôi hơi bối rối về điều đó. –

+0

@JohnLucas Tôi đã thay đổi câu trả lời của mình để thử và giải quyết các câu hỏi của bạn. Xin vui lòng cho tôi biết nếu bạn cần thêm trợ giúp. –

+0

Cảm ơn sự giúp đỡ của bạn –