Правильна конфігурація 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' як кодування для покриття всього 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") %>

( Довідка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?
коняк

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.