【问题标题】:Correct MySQL configuration for Ruby on Rails Database.yml file为 Ruby on Rails Database.yml 文件正确配置 MySQL
【发布时间】:2011-08-17 20:29:14
【问题描述】:

我有这个配置:

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)

有什么明显的我做错了吗?

【问题讨论】:

    标签: mysql ruby-on-rails ruby yaml


    【解决方案1】:

    您应该将主机与端口号分开。 你可以有一些东西,比如:

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

    【讨论】:

    • 和主机不能是host: localhost
    • 出于安全原因,将root 用作生产数据库用户通常被认为是不好的做法。要为您的 rails 应用程序设置专用用户,请参阅MySQL docs about user creation
    • 同样出于安全原因(如果您使用版本控制),您不应将数据库密码存储在database.yml 中。相反,请执行 user3118220 所做的并从您的环境中获取它:password: ENV['MY_RAILS_APP_DB_PASSWORD']
    【解决方案2】:

    你也可以这样做:

    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(包括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") %>
      

      (Reference1) (Reference2)

      【讨论】:

        【解决方案4】:

        如果你可以有一个空的 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 配置:设置DATABASE_URL='mysql://root:my_password@host.com/my_db_name'

        【讨论】:

          【解决方案5】:

          如果您有多个用于测试和开发的数据库,这可能会有所帮助

          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
          

          【讨论】:

          • shosthost 有何不同?
          【解决方案6】:

          【讨论】:

            猜你喜欢
            • 2016-08-12
            • 1970-01-01
            • 2011-12-03
            • 1970-01-01
            • 1970-01-01
            • 2014-06-24
            • 1970-01-01
            • 1970-01-01
            • 2011-02-13
            相关资源
            最近更新 更多