【问题标题】:Remote mysql database on Heroku appHeroku 应用程序上的远程 mysql 数据库
【发布时间】:2011-07-20 19:14:11
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1 - 创建 mysql 数据库 2 - 创建 mysql 数据库用户(设置默认值) 3.1 - 转到您的 Heroku 面板/Config Vars

    3.2 - 点击“Reveal Vars”并编辑(点击铅笔图标)你想在这种情况下更改的DATABASE_URL(如果不存在只是一个以DATABASE_URL为名称的新)

    3 (#2) - 使用命令行

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

    那么就

    heroku restart

    记住语法:

    DATABASE_URL

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

    MySQL DBMS 的默认端口号为:3306

    这就是为什么您会看到前面提到的示例使用DATABASE_URL=mysql://dbusername:dbpassword@databasehostIP:3306/databasename

    希望对你有帮助!!!

    【讨论】:

      【解决方案2】:
      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 地址而不是直接使用主机名,因为使用一些共享托管服务(如 godaddy),数据库主机名看起来像 user.345432.abcd.godaddy .com 似乎 heroku 无法正确解决它(个人经验),我将主机名解析为 IP 地址并直接使用 IP 就像一个魅力!此外,如果您的数据库密码包含特殊字符,请确保正确转义它们(例如 '\!' 代表 '!' 等等..)

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          这是旧的,但如果有人四处寻找答案,它比使用 gem 容易得多。只需提供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,因此在您的情况下,url 中不需要它。部署时,您可能会注意到它会生成您的 database.yml:

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

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

          【讨论】:

          • 看来DATABASE_URL 就够了,不用指定SHARED_DATABASE_URL 也能正常工作。另外,我想注意到mysql2 适配器现在比mysql 更常见。所以它看起来像mysql2://...。当然,您必须在您的Gemfile 中添加gem 'mysql2'
          • X.509可以这样用吗?
          • “万一anyone四处寻找答案”。你刚刚拯救了我的一天。谢谢!这比我想象的要简单得多。
          • “只要您的服务器接受来自您的 heroku 主机的连接。”,我正在部署一个 PHP 应用程序,而 heroku 的主机在不断变化。我不断收到Host 'ec2-xxxxxxxxxxx.compute-1.amazonaws.com' is not allowed to connect to this MySQL server,其中 xxxx 是一些任意 IP。我不能只允许一个特定的 IP,因为它是动态变化的。您对此有什么建议吗?
          • @augie-gardner 不幸的是不是——我想你最好的办法(或最窄的过滤器)是在你的 mysql 服务器中添加一个通配符帐户名以匹配所有 ec2-%.compute-1.amazonaws .com(并从那里开始工作)。就我个人而言,我会选择 %.amazonaws.com 并设置一个冗长的安全密码。如果您受到 AWS 服务器的攻击,至少您知道该向谁发送电子邮件。
          【解决方案5】:

          我写了一个可以帮助解决这个问题的 gem。您可以在以下位置找到它:

          http://github.com/nbudin/heroku_external_db

          【讨论】:

          • 谢谢纳特。我已经使用你的 gem 一个月了,效果很好!
          • 我们也已经使用了大约一年。我为该项目添加了一些文档,以便更容易开始。这是我博客上文章的链接:benjaminoakes.com/2011/11/21/…
          【解决方案6】:

          Heroku 会忽略您的 database.yml。您将需要探索 John Beynon 建议的 Amazon RDS 解决方案或其他一些类似的插件(如果有的话)。 IMO,您要么必须重新评估使用 MySQL 数据库的需要,要么找到其他一些主机。 以防万一你还不知道,命令:

          heroku db:push
          

          将在 heroku 的 Postgres 数据库中复制 MySQL 开发数据库的模式和数据。所以坚持使用 MySQL for dev 是没有问题的。

          希望对你有帮助。

          【讨论】:

          • 我发现忽略我的 database.yml 并尝试使用以下命令配置 DATABASE_URL:config:add DATABASE_URL=mysql2://user:password@host/dbname 但不起作用,应用程序是在亚马逊服务器上寻找数据库。这是来自日志:/app/.bundle/gems/ruby/1.8/gems/mysql2-0.2.6/lib/mysql2/client.rb:37:in `connect': Access denied for user 'etok'@'ec2 -174-129-89-188.compute-1.amazonaws.com'(使用密码:YES)(Mysql2::Error)
          猜你喜欢
          • 2019-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-11
          • 2020-12-03
          • 1970-01-01
          相关资源
          最近更新 更多