我只是想先說我覺得你的痛苦。我最近是Rails 3 + Heroku + Amazon RDS的完全新手。但是,今晚我征服了這個問題,立即開始了Stack Overflow,讓有問題的人知道如何。我稍後會在這裏發表博客。其中一些,你可能會跳過,但我會盡量全面地迴應我的迴應,包括你需要採取的步驟以及我遇到的陷阱和問題。
疑難雜症#1: Heroku的安裝失敗mysql2寶石,出現以下錯誤:
You have added to the Gemfile:
* mysql2
FAILED: http://devcenter.heroku.com/articles/bundler
! Heroku push rejected, failed to install gems via Bundler
解決方案:我幾乎總是使用PostgreSQL爲任何苛刻的我正在和沙箱和實驗,我只是使用SQLite3快速進出。真正的問題是我沒有在本地機器上運行MySQL。當我回來並嘗試在本地運行bundle install
時,自然地,gem安裝失敗,因爲它無法找到mysql庫。我確信有一種解決方法,但我只是咬緊牙關,在本地安裝mysql。之後,我可以毫無問題地運行bundle install
。此外,git push heroku master
推應用程序的Heroku沒有失敗:
Installing activerecord (3.0.6)
Installing activeresource (3.0.6)
>>>>Installing mysql2 (0.3.2) with native extensions<<<<
Using bundler (1.0.7)
Installing thor (0.14.6)
Installing railties (3.0.6)
Installing rails (3.0.6)
Installing sqlite3 (1.3.3) with native extensions
Your bundle is complete! It was installed into ./.bundle/gems/
Compiled slug size is 3.9MB
-----> Launching... done
http://myapp.heroku.com deployed to Heroku
疑難雜症#2:我的應用程序哽咽,甚至在安裝mysql2寶石後。 heroku logs
顯示:
RuntimeError (!!! Missing the mysql2 gem. Add it to your Gemfile: gem 'mysql2'):
什麼?我只是將它添加到我的gem文件中,承諾並推動它成功!我真的認爲有人在對我玩一個討厭的玩笑。一個小小的研究,了蹊蹺透露,heroku rake db:migrate
正在恢復:
WARNING: This version of mysql2 (0.3.2) doesn't ship with the ActiveRecord adapter bundled anymore as it's now part of Rails 3.1
WARNING: Please use the 0.2.x releases if you plan on using it in Rails <= 3.0.x
解決方案:我卸載了mysql2寶石與gem uninstall mysql2
,然後修改線在我的Gemfile閱讀:
gem 'mysql2', '< 0.3'
此安裝mysql2 gem的0.2.7版本,它也成功安裝在Heroku上。
疑難雜症#3:安裝的mysql2寶石的正確版本後,heroku rake db:migrate
仍返回相同的錯誤:
rake aborted!
!!! Missing the mysql2 gem. Add it to your Gemfile: gem 'mysql2'
好了,所以我做了一些調查研究,發現this thread,這基本上告訴我,適配器試圖使用「mysql」適配器而不是「mysql2」適配器。
解決方案:圍繞這一問題的方法是手動設置heroku config
的DATABASE_URL
通過這樣做是爲了使用mysql2://
:
heroku config:add DATABASE_URL=mysql2://user:[email protected]/databaseName
(你可以找到「dbInstanceName.hostname.us - 東 - 1 .amazonaws.com「部分此網址在您的AWS配置面板中,通過點擊您正在使用的數據庫)
這必須使用命令行工具完成,並且無法使用RDS附加GUI進行添加網絡控制面板,因爲Heroku不會接受它作爲VA那裏蓋db數據庫URL。
問題4:不正確的安全配置不會返回信息性或有用的錯誤。
解決方案:確保您已經添加了一個安全組到您的RDS配置允許的Heroku訪問您的RDS實例,並補充說,安全組到您的實例。對於CLI幫助,您可以查看RDS docs on Heroku或登錄AWS控制檯並執行以下操作:
- 單擊頂部的RDS選項卡。在左側欄中
- 點擊DB安全組
- 單擊「創建DB安全組」
- 輸入名稱和描述(例如:名稱:Heroku的,說明:允許Heroku的訪問!「)
- 在下面板中,通過選擇新組,從下拉列表中選擇」EC2安全組「,創建一個新授權
- 對於安全組,輸入:」default「和AWS賬戶ID,輸入: 「098166147350」(這很重要;此帳號屬於Heroku,並且它必須添加到默認安全組才能工作。)
- 單擊「添加」
- 重要!修改現有數據庫並添加
所以,回顧一下,如果你有:
- 安裝了mysql2寶石(< 0.3)
- 設置你的Heroku配置通過正確設置DATABASE_URL使用mysql2適配器的正確版本。
- ,並確保Heroku上通過創建AWS RDS適當的安全組可以訪問您的RDS,並補充說,安全組到您的數據庫,
您現在應該能夠3應用程序上使用RDS與你的Rails Heroku的。 :)
重要的是,如果您使用mysql2 gem作爲適配器,請將連接的URL方案更改爲'mysql2://'(請參閱步驟6)。 – 2012-01-27 11:38:29