Poprawna konfiguracja MySQL dla pliku Ruby on Rails Database.yml


90

Mam taką konfigurację:

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

Otrzymuję ten błąd:

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

Czy jest coś oczywistego, co robię nieprawidłowo?

Odpowiedzi:


198

Należy oddzielić hosta od numeru portu. Możesz mieć coś takiego jak:

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

3
a gospodarz nie może byćhost: localhost
Adrian C.

Ze względów bezpieczeństwa używanie rootjako użytkownik produkcyjnej bazy danych jest ogólnie uważane za złą praktykę . Aby skonfigurować dedykowanego użytkownika dla aplikacji railsowej, zapoznaj się z dokumentacją MySQL dotyczącą tworzenia użytkowników .
Feliks Montez

1
Również ze względów bezpieczeństwa (jeśli używasz kontroli wersji) nie powinieneś przechowywać hasła do bazy danych w database.yml. Zamiast robić to, co zrobił user3118220 i dostać go od środowiska: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez

17

Możesz też zrobić w ten sposób:

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

Użyj „utf8mb4” jako kodowania, aby objąć wszystkie Unicode (w tym emoji)

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

( Referencja1 ) ( Referencja2 )


2

Jeśli możesz mieć pusty plik config / database.yml to zdefiniuj zmienną ENV ['DATABASE_URL'], to zadziała

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

dla Heroku: heroku config: set DATABASE_URL='mysql://root:my_password@host.com/my_db_name'


0

Może to pomóc, jeśli masz wiele baz danych do testowania i programowania

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
czym shostróżni się od host?
konyak

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.