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

dor*_*kon 36 ruby-on-rails heroku ruby-on-rails-3

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

我像这样配置了我的生产数据库:

production:
    adapter: mysql2
    database: somedatabase
    username: someusername
    password: somepassword
    host: 1.1.1.1:1234
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*nce 50

这已经很老了,但是如果有人到处寻找答案,那就比使用宝石容易得多.只需提供一个(DATABASE_URL并且SHARED_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
Run Code Online (Sandbox Code Playgroud)

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

-----> Writing config/database.yml to read from DATABASE_URL
Run Code Online (Sandbox Code Playgroud)

然后你被设置(只要你的服务器接受来自heroku主机的连接.

  • 似乎`DATABASE_URL`就足够了,它可以在不指定`SHARED_DATABASE_URL`的情况下工作.另外,我想注意`mysql2`适配器现在比`mysql`更常见.所以它看起来像`mysql2:// ...`.当然你必须在`Gemfile`中添加`gem'mysql2'. (9认同)
  • "如果'任何人'都在寻找答案".你刚刚结束了我的一天.谢谢!这比我想象的要简单得多. (2认同)
  • "只要你的服务器接受来自heroku主机的连接.",我正在部署一个PHP应用程序,而heroku的主机也在不断变化.我一直得到`主机'ec2-xxxxxxxxxxx.compute-1.amazonaws.com'不允许连接到这个MySQL服务器`,其中xxxx是一些任意的IP.我不能只允许一个特定的IP,因为它正在改变.你对此有什么建议吗? (2认同)

Nat*_*din 8

我写了一个宝石,可能有助于此.您可以在以下位置找到它:

http://github.com/nbudin/heroku_external_db


Sha*_*eru 5

heroku config:add DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename
Run Code Online (Sandbox Code Playgroud)

然后,做一个

Heroku restart 
Run Code Online (Sandbox Code Playgroud)

应该这样做。

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