Configuração correta do MySQL para o arquivo Ruby on Rails Database.yml


88

Eu tenho esta configuração:

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

E estou recebendo este erro:

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

Há algo óbvio que estou fazendo incorretamente?

Respostas:


196

Você deve separar o host do número da porta. Você poderia ter algo, como:

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

2
e o anfitrião não pode serhost: localhost
Adrian C.

Por motivos de segurança, geralmente é considerado uma prática inadequada usar rootcomo usuário do banco de dados de produção. Para configurar um usuário dedicado para seu aplicativo rails, consulte os documentos do MySQL sobre a criação de usuários .
Feliks Montez

1
Também por motivos de segurança (se você estiver usando controle de versão), você não deve armazenar a senha do banco de dados no database.yml. Em vez disso, fazer o que user3118220 fez e obtê-lo a partir de seu ambiente: password: ENV['MY_RAILS_APP_DB_PASSWORD'].
Feliks Montez

17

Você também pode fazer assim:

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

Se você pode ter um arquivo config / database.yml vazio, defina a variável ENV ['DATABASE_URL'], então funcionará

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

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


2

Use 'utf8mb4' como codificação para abranger todos os Unicode (incluindo emojis)

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

( Referência1 ) ( Referência2 )


0

Se você tiver vários bancos de dados para teste e desenvolvimento, isso pode ajudar

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
como é shostdiferente de host?
konyak

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.