2012-12-02 98 views
1

我想要做的就是在Heroku上使用RDS上的db實例部署我的Rails應用程序,這看起來應該很簡單。使用MySql2將Heroku連接到RDS

我在我的database.yml中使用mysql2適配器,並推送到heroku,並按照this answer添加了我的db實例。我基本上跟着它到了T,並且我沒有得到missing gem錯誤。但是,這是什麼heroku logs透露:

/app/vendor/bundle/ruby/1.9.1/bundler/gems/mysql2-e5992664a7bc/lib/mysql2/client.rb:56:in connect': Can't connect to MySQL server on 'nickcoxrails.cud3e2tma07q.us-east-1.rds.amazonaws.com' (110) (Mysql2::Error) 

另請注意,我的RDS實例是在美國東部,這是我聽到的是一個問題here

在我的Gemfile,我有:

gem 'mysql2', :git => 'git://github.com/brianmario/mysql2.git'

我mysql2寶石,因爲它是我能得到它在本地工作(因爲使用的版本的唯一途徑< 0.3%是第一個回答給了我一個錯誤在我的本地Rails服務器上,因爲我在Rails 3.2.6上),嘗試了很多東西(我真的無法讓mysql在本地機器上運行)。

我已經明確地按照this answer添加了安全組,並且已經按照this answer添加了mysql2數據庫。我還在我的heroku帳戶中添加了RDS插件。我跑rake db:createrake db:schema:loadrake db:migrate和一切,但因爲我出口我的本地數據庫到我的RDS實例(我需要保持數據完整),沒有的,做任何新的東西。我可以通過Sequel Pro連接到我的RDS實例,所以我知道它不是憑證問題。

這是我的第一個Rails應用程序部署,所以不要害怕貶低你的答案,並給我相當於「是否插入?」針對heroku/Rails/RDS /等的技術支持問題。

+0

您可能想嘗試按照官方文檔使用[RDS插件](https://devcenter.heroku.com/articles/amazon_rds)。 –

+0

感謝您的建議。請注意,在我的問題中,我提到了附加組件。當我'heroku conifig:得到DATABASE_URL'時,它迴應了我的RDS數據庫,所以我假設設置正確。這是一個合理的假設嗎? – nickcoxdotme

+0

對不起,錯過了閱讀這個問題。如果'DATABASE_URL'設置了您的RDS實例,則表明它已正確設置。你是否在安裝插件後運行'rds-authorize-db-security-group-ingress'?錯誤消息表明這可能是問題。 –

回答

2

確保您已授權來自Heroku擁有的AWS賬戶098166147350的安全組default。錯誤消息表明您的連接不被允許。

4

的Heroku改變了程序,讓Heroku的服務器連接到RDS實例。這個問題被接受的答案不是應該如何去做。

您必須授予Heroku dynos訪問您的RDS實例。推薦的方法是將RDS實例配置爲只接受SSL加密的連接,併爲您的實例配置安全組以允許來自所有IP的入口。

此前,Heroku發佈了其AWS賬戶ID和安全組名稱,以授予對AWS RDS實例的訪問權限。 這不再推薦。

編號:https://devcenter.heroku.com/articles/amazon_rds

0

我只是Heroku的+ AWS(MySQL實例)取得了勝利。爲了解決這個問題(操作員錯誤),我必須在Heroku中放置一張支持票,我想發佈此信息以幫助其他人。我不斷碰到這個線程。

我使用Rails(4)在Heroku W/MySQL的亞馬遜RDS。是的,你需要配置SSL(pem文件和所有的樂趣)。但是我無法讓Rails連接並且非常接近所有的步行路徑。亞馬遜數據庫正在工作,我可以連接到Heroku/Rails之外沒有問題(通過我的IP)。

問題在於安全組和IP訪問。通過我的支持票證「[您的] RDS mysql數據庫...您需要允許來自所有IP的入口」。這是Heroku提供的鏈接:https://devcenter.heroku.com/articles/amazon_rds#require-ssl其中Heroku目前聲明:

「您必須授予Heroku dynos訪問您的RDS實例的權限。推薦的方法是將RDS實例配置爲僅接受來自SSL加密連接授權用戶併爲您的實例配置安全組以允許來自所有IP的入站。「

一些搜索很快導致我修改默認的安全組對我的AWS數據庫實例和添加的CIDR/IP條目:

0.0.0.0/0 

實質上允許任何/所有的IP地址。一旦授權所有連接。

我仍在審查此設置並尋求朋友和社區的反饋。幸運的是,我仍然在開發,並有一段時間來消化這個設置。

希望這可以節省一些時間,這似乎是目前通過Heroku Dynos連接到AWS DB的方法。

祝你好運,我會留意任何反饋。

編輯:睡在設置後,我從默認狀態中刪除了0.0.0.0/0,並將其添加到一個孤立的安全組,並進行測試 - 工作。我擔心默認安全組正在應用樣式IP訪問非SSL數據庫。那感覺不對。