2016-09-12 63 views
1

首先,我是一个总Rails/PostgreSQL noob。使用外部postgres数据库将轨道部署到Heroku

我想部署一个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 

我在做什么错?

回答

0

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

Heroku默认将您的应用程序设置为“生产”状态,这意味着它将使用'production'下的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。

EDIT
根据该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=..... 
+0

谢谢您的回答!当我运行第一个命令(使用和不使用大括号)时,我得到DATABASE_URL:postgress:// wwydh_a_team:[email protected]:5432/wwydh无效。必须采用FOO = bar格式。 –

+0

更新,我改变了DATABASE_URL:postgres到DATABASE_URL = postgres并且运行了命令,但我得到了“无法覆盖附件值DATABASE_URL”。 –

+0

对不起':'我更新了回答 –