You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署Rails应用生产环境MySQL配置及迁移问题咨询

问题1解答

  • Heroku部署的Rails应用默认会优先读取DATABASE_URL环境变量作为数据库连接配置,你在database.yml中写的production配置会被该环境变量覆盖。
  • 如果你是主动安装的ClearDB MySQL插件,要使用ClearDB分配的数据库,有两种配置方式:
    1. 直接修改database.yml的production块,不用单独填各个参数,直接指定url即可,注意适配Rails的mysql2适配器:
    production:
      <<: *default
      url: <%= ENV['CLEARDB_DATABASE_URL'].sub('mysql://', 'mysql2://') %>
    
    1. 如果你要分开写各个参数,需要把database字段的值改为CLEARDB_DATABASE_URL里的<database1>,你当前配置里填的exampleapp是本地开发库的名字,和生产库名不匹配,会导致连接错误。
  • 如果没有特殊需求,优先使用ClearDB提供的CLEARDB_DATABASE_URL即可,额外存在的DATABASE_URL大概率是之前配置遗留的无效值。

问题2解答

  • 你检查生产库的方式是正确的,使用ClearDB分配的用户名、密码、主机登录后查询的就是你配置的生产库内容。
  • 执行heroku run rails db:migrate没有生成表的核心原因是你的Rails应用没有连接到你检查的这个<database1>库:要么是应用优先读了DATABASE_URL,迁移都跑在了<database2>库中,要么是你database.yml里的database字段配置错误,连接到了不存在的库。你可以登录<database2>库执行show tables验证是不是迁移都跑在了这个库中。
  • 手动执行SQL建表是可以和应用正常关联的,只要你建的表结构、字段命名完全符合Rails迁移的规则,同时要记得同步schema_migrations表的迁移记录,否则后续执行迁移命令会出现重复执行的错误。
  • 本地数据迁移到生产环境可以直接用mysqldump工具:
    1. 本地导出数据库备份:mysqldump -u本地用户名 -p 本地数据库名 > backup.sql,执行后输入本地数据库密码即可生成备份文件
    2. 导入备份到生产库:mysql -u<username1> -p<password1> -h<host1> <database1> < backup.sql,注意密码和-p参数之间不要留空格。

内容的提问来源于stack exchange,提问作者Emily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 10:42:03