首先,我是一个完全的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仪表板,单击安全组,并将我的默认组编辑为此,然后确保我的数据库实例正在使用该安全组。