如何將現有的Ruby on Rails專案移植到Heroku?

今天試著將兩個手頭上已經沒在密集維護但偶有流量的網站移植到Heroku上來降低維護的成本,過程中相當輕鬆地將專案無痛轉移到Heroku之外,連資料都一起順利轉移過去了,以下是轉移步驟的簡介。

  1. 將專案納入git版本控管中,指令是git init
  2. 建立一個新的Heroku空間,指令是heroku create或是heroku create YOUR_APP_NAME
  3. 在config/environment.rb加上$KCODE=’u'(避免中文編碼問題,我是加在第一行)
  4. 將所有檔案丟到Heroku上:git add . ; git commit -a -m “deploy to Heroku” ; git push heroku master

步驟其實很簡單,官方文件上應該也能找到更詳盡的教學,另外要注意的是,如果您的專案擁有自己的網址,希望能一併指到Heroku,還需要注意下列事項:

  1. 將DNS中的CNAME 指到proxy.heroku.com,或是將A Record指到75.101.163.44, 75.101.145.87, 174.129.212.2,Heroku的程式在新增custom domain name時會先檢查您的DNS Records。
  2. 請在Heroku的帳戶管理中輸入您的信用卡資料(custom domain name雖然是免費的服務,但要驗證信用卡)
  3. 使用heroku addons:add custom_domains指令啟用自定網址
  4. 使用heroku domains:add YOUR_DOMAIN_NAME來新增網址

當然,上述步驟可以不透過指令,直接在Heroku的管理介面完成。

我自己在移植的過程中遇到兩個問題,第一個是資料丟上Heroku之後都變成亂碼,但我的MySQL編碼就是UTF8了,實在沒道理,因此就嘗試加上$KCODE的設定,沒想到馬上管用。

第二個問題是資料如何丟到Heroku,步驟也很簡單:

  1. sudo gem install tap(tap就是讓你可以無痛轉移的關鍵Ruby gem)
  2. heroku db:push(如此一來就會把資料庫,包括schema、data、index完整送上Heroku)

其中要注意的是,Heroku設計的原意是讓你可以將開發過程中已有的測試資料(development環境)丟上Heroku一併測試,因此我目前沒有找到如何讀取production環境的參數,我自己的作法是在config/database.yml中將development的設定改為production的設定,讓程式去讀取production。

或是你也可以使用指令的方式指定任意的資料庫:heroku db:push mysql://YOUR_USER_NAME:YOUR_PASSWORD@localhost/DB_NAME

P.S. 當然,如果嫌Heroku不好用或是其他原因想要搬家,只要下heroku db:pull,就會把雲端上的資料撈回來放在development環境,我自己是用SQLite,資料就會倒進SQLite了,是不是很方便呢?:p

如何設定Redmine的發信機制(透過Gmail)

上一篇文章如何在Heroku上架設免費、開放源碼的專案管理軟體:Redmine 中所提及的步驟可以協助軟體開發人員快速利用開放原始碼以及雲端運算平台Heroku的力量架設屬於自己的軟體專案管理系統。這篇文章將繼續介紹如何透過Google(Gmail或是您自己註冊的Google Apps)來完成Redmine的發信機制。

首先請在您的Redmind專案的lib目錄中新增smtp_tls.rb檔案,內容如下:

接著在config/environment.rb的最後面新增下列程式碼:

記得將帳號、密碼更換為您自己的設定,若是註冊在Google Apps底下的Gmail,請記得輸入完整的帳號名稱,例如:[email protected]。(domain仍然保留gmail.com即可)

最後利用git指令將最新版的程式碼丟到Heroku上即可!
git add . ; git commit -a -m “Email settings and file:smtp_tls.rb added”
git push heroku master

P.S. 請記得先以管理員的帳號在您的Redmin系統設定中將系統網址、帳號等選項設定為正確的,以免使用者遺失密碼或是註冊後無法正常啟用帳號。

如何在Heroku上架設免費、開放源碼的專案管理軟體:Redmine

Redmine是一套使用Ruby on Rails所開發的軟體專案管理系統,我自己使用Redmine來追蹤、管理自己手邊的軟體專案已經一年多了,深深感受到Redmine所帶來的便利性。雖然軟體專案管理最終是「人」的管理以及制度如何落實的學問,但一套好的管理工具還是可以有效地提昇團隊合作效率,並且有助於追蹤工作進度。關於Redmine的介紹,改天再另外寫文章介紹(當然網路上應該有許多參考)。

這篇文章著重在如何利用Heroku(號稱提供Rails的雲端運算環境、簡單的部署流程並支援Git)架設免費的Redmine專案管理環境。

環境方面您至少要擁有Rails開發環境、Git版本控制軟體、Ruby gem: Heroku以及Heroku帳號,至於其他需要安裝的Ruby Gems請參考Redmine本身的需求。

  1. svn co http://redmine.rubyforge.org/svn/trunk redmine
  2. cd redmine
  3. 編輯.gitignore並移除下列兩行內容
    config/initializers/session_store.rb
    public/plugin_assets
  4. rake config/initializers/session_store.rb
  5. mv config/database.yml.example config/database.yml
  6. rake db:migrate RAILS_ENV=”demo”(這一段我是用SQLite的資料庫,是Redmine預設的,有跑這一段好像才會作一些初始化的動作,我就沒仔細去研究如何繞過這一段了,您可以自己在local端開個mysql來完成這個項目)
  7. git init; echo .svn >> .gitignore ; git add . ; git commit -a -m “Init Redmine project”
  8. svn propset svn:ignore .git .(請svn忽略.git目錄,請注意.git之後還有一個 .)
  9. heroku create(或是heroku create your_app_name,若沒指定名稱則會由Heroku隨機產生;完成指令後可以下heroku info觀看相關資訊)
  10. git push heroku master
  11. heroku rake db:migrate

此時在瀏覽器中造訪您的Heroku網址應該就會看到正常執行的畫面了。Redmine預設的管理員帳號密碼皆為admin,您可以直接登入開始使用Redmine來做為您的軟體專案管理系統。

P.S. 依照上列步驟安裝後尚無法使用E-mail發信功能(E-mail notifications for any updates),我在自己的主機上是習慣使用Gmail(或是Google Apps下的Mail)來發信免去自行維護郵件主機的麻煩,我猜Heroku上也可以如法炮製,由於這部份我還沒有研究,等下一篇文章再與各位分享。