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

时间:2016-09-12 04:09:20

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

首先,我是一个完整的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

我做错了什么?

2 个答案:

答案 0 :(得分: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=.....

答案 1 :(得分:0)

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

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

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