Правильная конфигурация 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
Адриан К.

По соображениям безопасности использование rootв качестве пользователя производственной базы данных обычно считается плохой практикой . Чтобы настроить выделенного пользователя для вашего приложения rails, см. Документацию MySQL о создании пользователей .
Феликс Монтес

1
Также по соображениям безопасности (если вы используете контроль версий) вы не должны хранить пароль своей базы данных в database.yml. Вместо этого, делать то , что делали user3118220 и получить его из среды: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Феликс Монтес

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' в качестве кодировки, чтобы охватить весь юникод (включая смайлики)

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

( Ссылка1 ) ( Ссылка2 )


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.