Bạn có thể kết nối với máy chủ Postgres bằng rõ ràng (my
tức là tên người dùng hệ điều hành) hoặc ẩn (timonin
tức là vai trò trong database.yml
) đăng nhập.
Khi tôi thấy database.yml
của bạn có tuyên bố tên người dùng, nhưng chỉ dành cho sản xuất Môi trường. Chạy thử nghiệm rake mà không chỉ định môi trường Rails sẽ chạy chúng chống lại phát triển môi trường theo mặc định. Đó là lý do tại sao bạn gặp lỗi như FATAL: role "my" does not exist
.
Vì vậy, tùy thuộc vào nhu cầu của bạn, bạn phải thêm các câu lệnh này vào tất cả các lỗi của cơ sở dữ liệu (test
và development
cũng như vậy):
username: timonin
password: <%= ENV['TIMONIN_DATABASE_PASSWORD'] %>
Sau đó, ứng dụng Rails của bạn sẽ kết nối dưới dạng timonin
người dùng.
Danh sách kiểm tra đầy đủ như sau:
- Tạo vai trò
Đây là SQL cho PostgreSQL:
CREATE ROLE timonin LOGIN PASSWORD 'Pas$_sword'
NOINHERIT CREATEDB
VALID UNTIL 'infinity';
COMMENT ON ROLE timonin
IS 'Timonin database role for Rails app';
- Bỏ ghi chú hoặc thêm câu lệnh
username: timonin
vàpassword: <%= ENV['TIMONIN_DATABASE_PASSWORD'] %>
vào tệp database.yml của bạn - Chạy tất cả các thao tác với
TIMONIN_DATABASE_PASSWORD
biến:
Đây là lệnh rake đã thay đổi:
rake db:create TIMONIN_DATABASE_PASSWORD='Pas$_sword'
hoặc:
rake db:create TIMONIN_DATABASE_PASSWORD='Pas$_sword' RAILS_ENV=test
cho môi trường thử nghiệm.