【问题标题】:Deploy rails to Heroku using outside postgres database使用外部 postgres 数据库将 rails 部署到 Heroku
【发布时间】:2017-01-19 11:22:32
【问题描述】:

首先,我完全是 Rails/PostgreSQL 菜鸟。

我正在尝试将 Rails 应用程序部署到 Heroku。我已经启动并运行了它,但每次部署时,Heroku 都会忽略我的 database.yml 信息并生成一个新数据库。这是我的database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
 adapter: sqlite3
 pool: 5
 timeout: 5000

development:
 # <<: *default
 #  database: db/development.sqlite3
 adapter: postgresql
 pool: 5
 host: wwydh.cqqq2sesxkkq.us-east-1.rds.amazonaws.com
 timeout: 5000
 username: wwydh_a_team
 password: really cool password
 database: wwydh
 host: wwydh.cqqq2sesxkkq.us-east-1.rds.amazonaws.com
 port: 5432


# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
 <<: *default
 database: db/test.sqlite3

我做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql amazon-web-services heroku


    【解决方案1】:

    终于解决了!这就是我所做的,也许它会对某人有所帮助。

    Heroku 将您的应用默认为“生产”状态,这意味着它将使用您在“生产”下的 database.yml 文件中定义的设置。由于我没有任何这些设置,因此它正在创建一个要使用的数据库。我删除了我的 Heroku PostgreSQL 数据库(为我创建的数据库),并手动将我的 RAILS_ENV 变量(位于 Heroku 的应用程序设置下)切换为“开发”,瞧!我的应用程序连接到我的外部 AWS 数据库没问题。

    附注,确保您在 AWS 中定义了一个新的安全组,以允许来自任何入站源的传入连接,即 IE 0.0.0.0/0。否则,数据库将拒绝 Heroku 访问。我前往 AWS 中的 VPC 控制面板,单击安全组,并将我的默认组编辑为此,然后确保我的数据库实例正在使用该安全组。

    【讨论】:

      【解决方案2】:
      heroku config:add DATABASE_URL=postgres://{user}:{password}@{hostname}:{port}/{database-name}
      

      然后重新部署您的应用。它将读取您的 DATABASE_URL 并从中生成 database.yml。

      编辑
      根据这个SO question需要先分离数据库,然后更新变量DATABASE_URL。

      heroku addons:attach heroku-postgresql -a <app_name> --as HEROKU_DATABASE
      heroku addons:detach DATABASE -a <app_name>
      heroku config:add DATABASE_URL=.....
      

      【讨论】:

      • 感谢您的回答!当我运行第一个命令(带和不带大括号)时,我得到 DATABASE_URL:postgress://wwydh_a_team:password@wwydh.cqqq2sesxkkq.us-east-1.rds.amazonaws.com:5432/wwydh 无效。必须采用 FOO=bar 格式。
      • 更新,我将 DATABASE_URL:postgres 更改为 DATABASE_URL=postgres 并且命令运行,但我得到“无法覆盖附件值 DATABASE_URL。”
      • 看来需要先分离数据库。请查看我的编辑
      • 感谢您为我指明了正确的方向,我发布了我为修复它所做的答案。 :)
      猜你喜欢
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2013-07-20
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多