Heroku应用程序上的远程mysql数据库

时间:2011-03-22 19:55:35

标签: ruby-on-rails ruby-on-rails-3 heroku

我可以从我的个人网络服务器而不是heroku的数据库中使用mysql数据库吗?

我按照以下方式配置了我的生产数据库:

production:
    adapter: mysql2
    database: somedatabase
    username: someusername
    password: somepassword
    host: 1.1.1.1:1234

但是,这不起作用,我的应用仍然使用heroku的共享数据库。

6 个答案:

答案 0 :(得分:49)

这已经过时了但是如果有人在寻找答案的情况下,它比使用宝石容易得多。只需提供DATABASE_URLSHARED_DATABASE_URL(不确定是否需要第二个)。数据库URL格式为adapter://username:password@hostname:port/database,例如,您可以执行以下操作:

heroku config:add DATABASE_URL=mysql://etok:somepassword@<your-server>:3306/etok
heroku config:add SHARED_DATABASE_URL=mysql://etok:somepassword@79.101.41.213:3306/etok

然后重新部署您的应用。它将读取您的DATABASE_URL并从中生成database.yml。默认端口已经是3306,因此在您的情况下,网址中不需要它。部署时,您可能会注意到它生成了database.yml:

-----> Writing config/database.yml to read from DATABASE_URL

然后设置(只要您的服务器接受来自heroku主机的连接。

答案 1 :(得分:8)

我写过一篇可能有助于此的宝石。您可以在以下网址找到它:

http://github.com/nbudin/heroku_external_db

答案 2 :(得分:4)

heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

然后,做一个

Heroku restart 

应该这样做。

重要说明:我建议您使用数据库主机IP地址,而不是直接使用主机名,coz,与godaddy等一些共享主机服务,db主机名看起来像 user.345432.abcd.godaddy .com 似乎heroku无法正确解决它(个人经验),我将主机名解析为IP地址并使用IP直接像魅力一样工作!此外,如果您的数据库密码有特殊字符,请确保正确地转义它们(例如'\!'代表'!'等等。)

答案 3 :(得分:1)

看看Heroku Amazon RDS addon。我不是说使用它,但它让你深入了解你需要做什么以及Heroku如何管理数据库 - 基本上你需要为你的mysql实例设置一个配置变量。

答案 4 :(得分:1)

Heroku忽略了你的database.yml。您将需要探索John Beynon建议的Amazon RDS解决方案或其他类似的插件(如果有的话)。 IMO,您将不得不重新评估您使用MySQL数据库的需求或查找其他主机。 如果您还不知道,请执行以下命令:

heroku db:push

将在heroku的Postgres数据库中复制MySQL开发数据库的架构和数据。所以坚持使用MySQL开发是没问题的。

我希望有所帮助。

答案 5 :(得分:0)

是的,这是非常直接和简单的:

1 - 创建mysql db 2 - 创建mysql db user(设置默认值) 3.1 - 转到Heroku面板/配置变种

enter image description here

3.2 - 在这种情况下点击“显示变种”并编辑(点击铅笔图标)你要更改的那个DATABASE_URL(如果不存在,只有DATABASE_URL的新标记为heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:databaseserverport/databasename名)

enter image description here

3(#2) - 使用命令行

heroku restart

然后只是

DATABASE_URL

请记住语法:

mysql://user:password@hostnameOrIPAddress:PortNumber/databasename

3306

MySQL DBMS的默认端口号是:DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

这就是您之前使用%p

看到前面提到的示例的原因

希望这有帮助!!!