Cấu hình MySQL đúng cho tệp Ruby on Rails Database.yml


88

Tôi có cấu hình này:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: mysql://127.0.0.1:3306

Và tôi gặp lỗi này:

Unknown MySQL server host 'mysql://127.0.0.1:3306' (1)

Có điều gì đó rõ ràng rằng tôi đang làm không đúng?

Câu trả lời:


196

Bạn nên tách máy chủ khỏi số cổng. Bạn có thể có một cái gì đó, như:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: 127.0.0.1
  port: 3306

2
và máy chủ không thể làhost: localhost
Adrian C.

Vì lý do bảo mật, việc sử dụng rootlàm người dùng cơ sở dữ liệu sản xuất thường được coi là hành vi xấu . Để thiết lập người dùng chuyên dụng cho ứng dụng rails của bạn, hãy xem tài liệu MySQL về tạo người dùng .
Feliks Montez

1
Ngoài ra vì lý do bảo mật (nếu bạn đang sử dụng kiểm soát phiên bản), bạn không nên lưu trữ mật khẩu cơ sở dữ liệu của mình database.yml. Thay vào đó, làm những gì user3118220 đã làm và làm cho nó ra khỏi môi trường của bạn: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez

17

Bạn cũng có thể làm như thế này:

default: &default
  adapter: mysql2
  encoding: utf8
  username: root
  password:
  host: 127.0.0.1
  port: 3306

development:
  <<: *default
  database: development_db_name

test:
  <<: *default
  database: test_db_name

production:
  <<: *default
  database: production_db_name

2

Nếu bạn có thể có tệp config / database.yml trống thì hãy xác định biến ENV ['DATABASE_URL'], sau đó nó sẽ hoạt động

$ cat config/database.yml
 
$ echo $DATABASE_URL
mysql://root:my_password@127.0.0.1:3306/my_db_name

cho Heroku: cấu hình heroku: set DATABASE_URL='mysql://root:my_password@host.com/my_db_name'


2

Sử dụng 'utf8mb4' làm mã hóa để bao gồm tất cả unicode (bao gồm cả biểu tượng cảm xúc)

default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_bin
  username: <%= ENV.fetch("MYSQL_USERNAME") %>
  password: <%= ENV.fetch("MYSQL_PASSWORD") %>
  host:     <%= ENV.fetch("MYSQL_HOST") %>

( Tham chiếu1 ) ( Tham chiếu2 )


0

Nếu bạn có nhiều cơ sở dữ liệu để thử nghiệm và phát triển, điều này có thể hữu ích

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost
test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost
production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost

1
shostkhác nhau như thế nào host?
konyak 16/10/15

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.