使用外部postgres数据库将rails部署到Heroku



首先,我是一个完全的Rails/PostgreSQL新手。

我正在尝试部署一个rails应用程序到Heroku。我已经启动并运行了它,但每次部署时,Heroku都会忽略我的数据库。Yml信息,并生成一个新的数据库。这是我的数据库。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

我做错了什么?

heroku config:add DATABASE_URL=postgres://{user}:{password}@{hostname}:{port}/{database-name}

然后重新部署你的应用程序。它将读取你的DATABASE_URL并生成数据库。

编辑
根据这个SO问题,首先需要分离数据库,然后更新变量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=.....

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

Heroku将你的应用默认为"生产"状态,这意味着它将使用数据库中定义的设置。在"生产"下的Yml文件。因为我没有这些设置,所以它正在创建一个数据库来使用。我删除了我的Heroku PostgreSQL数据库(为我创建的数据库),并手动将我的RAILS_ENV变量(位于Heroku的应用程序设置下)切换为"development",瞧!我的应用连接到我的外部AWS数据库没有问题。

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

最新更新