App 上線至 Heroku
Created by Terence Lee, @hone02
Translation by JuanitoFatas, @JuanitoFatas
取得 Heroku
按照 Heroku 官方的快速上手指南的步驟 1 至步驟 3,來註冊、安裝工具包並登入。
教練: 講解將 App 部署到 Heroku,跟傳統自己架伺服器比起來,有什麼好處。
準備妳的 app
版本管理系統
需要把程式碼加到版本管理系統。在終端機裡輸入以下命令:
教練:講解使用版本管理系統的好時機。順便解釋 .gitignore
檔案是什麼,並解釋為什麼要忽略某些檔案被傳上去。
更新資料庫
首先,需要讓資料庫在 Heroku 跑起來。Heroku 使用不同於 Rails 預設的資料庫。請修改 Gemfile 的內容:
請將
改為
執行 bundle install --without production
命令來解決軟體相依問題。
教練: 可以講講 RDBMS 以及 pg 與 sqlite 的差別,請講點 Heroku 的 PostgreSQL 軟體相依細節。
安裝 rails_12factor Gem
接下來,需要在 Gemfile
加入 rails_12factor
,讓我們的 app 可以出現在 Heroku。
這個 Gem 調整妳的 Rails App 成為適合在 Heroku 工作的模式,舉例來說,記錄檔存放的地方、靜態檔案的設定(圖片、樣式表以及 JavaScript 檔案)會設定成適合 Heroku 系統的設定。
請修改 Gemfile
的內容:
將
改為
修改好之後到終端機執行 bundle
命令,接著將 Gemfile.lock
提交到妳的程式碼倉庫 (repository):
教練: 可以說說 Heroku 的記錄檔怎麼用,或是其它相關的東西。
部署 App
建立 App
需要在終端裡輸入 heroku create
,在 Heroku 上產生一個新的 Heroku app,妳會看到像是下面的訊息:
上面的 “evening-sky-7498” 就是妳 Heroku App 的名稱。
上傳程式碼
接著需要將程式碼上傳至 Heroku,輸入 git push heroku master
。妳會看到像是下面的輸出:
看到 “Launching…” 的訊息表示 App 已經上傳完畢了。
資料庫遷移
接著需要遷移資料庫,跟我們在工作坊時,在自己電腦上做的一樣: heroku run rake db:migrate
。
當這條命令執行完畢時,妳可以用產生出來的網址來訪問妳的 App,可以打開這個頁面 http://evening-sky-7498.herokuapp.com/ 看看。也可以在終端裡輸入 heroku open
來開啟網頁。
結束小記
沒有某些東西,便沒有 Heroku 平台。跑在 Heroku 上的應用程式都是放在一個叫做 ephermeral 的環境裡 ─ 這代表任何由妳的 app 建立的檔案(除了存在資料庫的資訊),在環境重新啟動後就會消失(比如妳 push 一個 App 的新版)。
Ephemeral 檔案系統
每個 dyno 都有自己的 ephemeral 檔案系統,裡面有最新一份佈署上去的程式。在 dyno 的生命期裡,執行中的進程可以把這個檔案系統當成草稿板,但沒有檔案會寫進去。當 dyno 被停止或重新啟動的時候,所有檔案都會被丟棄。
在 App 教學裡,新增 idea 時能上傳圖片,也就是將圖片寫到 app 的 public/uploads
資料夾。Ephemeral storage 上面所說的功能,可以用下列步驟重現出來:
- 用
heroku open
啟動 app - 加入新的 idea 以及圖片
- 用
heroku restart
重新啟動 app, - 回到 idea 頁面並重新整理,圖片應該不見了。
Ephemeral Storage 的解決辦法
當然妳在跑實際 App 的時候,這不是很有用。但事情總是有解決辦法,下面是許多知名網站的解決辦法。
最常見的方法是,asset 交給外部服務代管,像是 Amazon S3 (Simple Storage Service),或是 Rackspace CloudFiles。這些服務(便宜,每 GB $0.10)提供雲儲存服務,可以有持久化儲存(不會消失)。
這個功能有點超出本教學的範圍,這裡有更多資源,妳可以找到自己的解決辦法:
一如往常,如果妳需要更多資訊或協助,教練會幫妳。