2011-12-26 26 views
56

Tôi đang sử dụng Heroku cho ứng dụng của tôi và nó yêu cầu PostgreSQL nhưng bạn vẫn có thể sử dụng SQLite3 để phát triển. Kể từ khi Heroku mạnh mẽ khuyên chống lại có 2 cơ sở dữ liệu khác nhau, tôi quyết định chuyển sang PostgreSQL để phát triển. Tôi đã cài đặt gem pg và cũng đã truy cập trang PostgreSQL chính thức để tải xuống trình cài đặt Windows và cũng đã thay đổi database.yml của mình. Trong quá trình cài đặt, nó yêu cầu mật khẩu cho PostgreSQL vì vậy tôi đã tạo một mật khẩu. Tôi phải thay đổi tệp pg_hba.conf từ việc sử dụng md5 thành trust để nhận được quá khứ: fe_sendauth: no password supplied khi cố tạo cơ sở dữ liệu.Vai trò không tồn tại và không thể tạo cơ sở dữ liệu khi sử dụng 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 

Sau khi được thoát khỏi điều đó, mặc dù bây giờ tôi có được điều này:

$ 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} 

tôi vẫn có tôi development.sqlite3text.sqlite3 hiện tại, đó có thể là vấn đề? Điều gì phải được thực hiện?

Dưới đây là ý chính đầy đủ của tôi: https://gist.github.com/1522188

Trả lời

118

Thêm một tên người dùng để database.yml của bạn, cũng có thể sử dụng tên của ứng dụng của bạn (hoặc một số biến thể của tên) như tên người dùng, tôi sẽ sử dụng app_name như một giữ chỗ:

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

Sau đó tạo cho người sử dụng (AKA "vai trò") bên PostgreSQL sử dụng psql.exe:

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

Dòng đầu tiên nằm trong thiết bị đầu cuối của bạn, hai dòng tiếp theo nằm trong số psql. Sau đó, hãy thực hiện rake db:create của bạn.

Người dùng User có thể là một mặc định nhưng user is already taken cho các mục đích khác trong PostgreSQL, do đó bạn sẽ phải trích lược để giữ trường hợp nếu bạn muốn sử dụng User như một username:

postgres=# create role "User" login createdb; 

Bạn tốt hơn hết nên tạo một người dùng cho mỗi ứng dụng.

Bạn cũng sẽ muốn thực hiện những việc tương tự cho mục nhập test của mình trong số database.yml.

+1

Nó không cho phép tôi vào trong 'psql.exe'. Khi tôi cố gắng mở nó, cửa sổ xuất hiện và sau đó tự động đóng lại vì vậy tôi đã cố gắng đi đến dấu nhắc cmd và gõ vào 'c: \ Program Files .. \ .. \ bin> psql.exe> ​​psql: FATAL: vai trò "Người dùng" không tồn tại' nhận được 'FATAL' một lần nữa. Bất kỳ ý tưởng? – LearningRoR

+1

@wrbg: Bạn đã tạo người dùng 'postgres' trong khi cài đặt, phải không? Hãy thử 'psql -d postgres -U postgres', nếu bạn cần mật khẩu thì' psql -d postgres -U postgres -W'. –

+0

Nó không nhắc người dùng trong khi cài đặt. Hãy để tôi thấy trong cài đặt lại. – LearningRoR

6

PostgreSQL sẽ cố gắng tạo cơ sở dữ liệu bằng tên tài khoản (tên đăng nhập) của bạn nếu username không được chỉ định trong config/database.yml của bạn. Trên OS X và Linux, bạn có thể xem ai là người này với whoami. Có vẻ như bạn đang sử dụng Windows.

Giải pháp A: Create a PostgreSQL user phù hợp với công cụ tìm kiếm. Ví dụ

createuser --superuser some_user 

Giải pháp B: Thay đổi người sử dụng DB bằng cách thiết lập một cách rõ ràng tên người dùng as shown in mu's answer.

+0

Youdaman! Đây là người duy nhất làm việc cho tôi. –

+0

Có thực sự cần '--superuser' hoặc là' -d' đủ không? – Meekohi

4

Nếu bạn có một tài khoản/người dùng cụ thể trên máy của bạn cho postgres gọi là postgres chẳng hạn.

Sau đó, thực hiện lệnh này sẽ nhắc bạn nhập tên vai trò.

sudo -u postgres createuser --interactive 

Sau đó làm

rake db:create 

nên làm việc!

Các vấn đề liên quan