2016-09-12 65 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

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