แก้ไขการกำหนดค่า MySQL สำหรับไฟล์ Ruby on Rails Database.yml


90

ฉันมีการกำหนดค่านี้:

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

และฉันได้รับข้อผิดพลาดนี้:

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

มีบางอย่างที่ชัดเจนว่าฉันทำไม่ถูกต้อง?

คำตอบ:


198

คุณควรแยกโฮสต์ออกจากหมายเลขพอร์ต คุณสามารถมีบางอย่างเช่น:

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

3
และโฮสต์ไม่ได้host: localhost
Adrian C.

ด้วยเหตุผลด้านความปลอดภัยโดยทั่วไปถือว่าเป็นการปฏิบัติที่ไม่ดีในการใช้rootเป็นผู้ใช้ฐานข้อมูลการผลิต ในการตั้งค่าผู้ใช้เฉพาะสำหรับแอปพลิเครางของคุณให้ดูที่เอกสาร MySQL เกี่ยวกับการสร้างผู้ใช้
Feliks Montez

1
นอกจากนี้สำหรับเหตุผลด้านความปลอดภัย (ถ้าคุณกำลังใช้การควบคุมเวอร์ชัน) database.ymlคุณไม่ควรเก็บรหัสผ่านฐานข้อมูลของคุณใน แต่ทำในสิ่งที่ user3118220 password: ENV['MY_RAILS_APP_DB_PASSWORD']ได้และได้รับมันจากสภาพแวดล้อมของคุณ:
Feliks Montez

17

คุณสามารถทำได้เช่นนี้:

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

3

ใช้ 'utf8mb4' เป็นการเข้ารหัสเพื่อให้ครอบคลุม Unicode ทั้งหมด (รวมถึงอิโมจิ)

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

( Reference1 ) ( Reference2 )


2

หากคุณสามารถมีไฟล์ config / database.yml ว่างให้กำหนดตัวแปร ENV ['DATABASE_URL'] มันจะทำงาน

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

สำหรับ Heroku: heroku config: set DATABASE_URL='mysql://root:my_password@host.com/my_db_name'


0

หากคุณมีหลายฐานข้อมูลสำหรับการทดสอบและพัฒนาสิ่งนี้อาจช่วยได้

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
เป็นวิธีการshostที่แตกต่างกันกว่าhost?
konyak

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.