2011-03-19 60 views
17

我想部署一個使用MySQLHeroku的幫助部署Rails應用程序使用Mysql數據庫

一個Rails應用程序,我有:

  1. 創建一個應用程序的Heroku,並已推我的應用程序的Heroku。

  2. 我已添加Amazon RDS我創建了Amazon RDS數據庫實例。 我的Heroku亞馬遜RDS數據庫網址是:mysql的:// mysusername:[email protected]/mydatabasename

我的亞馬遜RDS數據庫安全組設置爲默認

  • 我試圖把我的本地數據庫,但出現以下錯誤Heroku help Amazon RDS rails push database error
  • 我在做什麼錯?

    我的Rdshostname是什麼?它是亞馬遜終端嗎?

    回答

    4
    1. 把你的應用的Heroku(不要忘了包括創業板抽頭)
    2. 加入插件,亞馬遜RDS
    3. 在亞馬遜RDS創建一個數據庫實例
    4. 走進安全組,並添加在此以下答案Heroku help Amazon RDS rails push database error
    5. 你端點URL是沒有.amazonaws.com
    6. 登錄Heroku的和進入亞馬遜RDS插件,並添加MySQL您rdshostname:// mysusername:[email protected] om/databasename
    +7

    重要的是,如果您使用mysql2 gem作爲適配器,請將連接的URL方案更改爲'mysql2://'(請參閱步驟6)。 – 2012-01-27 11:38:29

    36

    我只是想先說我覺得你的痛苦。我最近是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 configDATABASE_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控制檯並執行以下操作:

    1. 單擊頂部的RDS選項卡。在左側欄中
    2. 點擊DB安全組
    3. 單擊「創建DB安全組」
    4. 輸入名稱和描述(例如:名稱:Heroku的,說明:允許Heroku的訪問!「)
    5. 在下面板中,通過選擇新組,從下拉列表中選擇」EC2安全組「,創建一個新授權
    6. 對於安全組,輸入:」default「和AWS賬戶ID,輸入: 「098166147350」(這很重要;此帳號屬於Heroku,並且它必須添加到默認安全組才能工作。)
    7. 單擊「添加」
    8. 重要!修改現有數據庫並添加

    所以,回顧一下,如果你有:

    1. 安裝了mysql2寶石(< 0.3)
    2. 設置你的Heroku配置通過正確設置DATABASE_URL使用mysql2適配器的正確版本。
    3. ,並確保Heroku上通過創建AWS RDS適當的安全組可以訪問您的RDS,並補充說,安全組到您的數據庫,

    您現在應該能夠3應用程序上使用RDS與你的Rails Heroku的。 :)

    +1

    壞蛋答案,提姆西!讓我走上正軌。 – typeoneerror 2011-09-08 14:31:05

    +0

    你救了我!謝謝!! – stellard 2011-10-11 14:34:26

    +0

    很好的答案。謝謝!在gotcha上陷入了一段時間#3 – djburdick 2012-12-29 00:42:40