Posted by (0) Comment
今天試著將兩個手頭上已經沒在密集維護但偶有流量的網站移植到Heroku上來降低維護的成本,過程中相當輕鬆地將專案無痛轉移到Heroku之外,連資料都一起順利轉移過去了,以下是轉移步驟的簡介。
步驟其實很簡單,官方文件上應該也能找到更詳盡的教學,另外要注意的是,如果您的專案擁有自己的網址,希望能一併指到Heroku,還需要注意下列事項:
當然,上述步驟可以不透過指令,直接在Heroku的管理介面完成。
我自己在移植的過程中遇到兩個問題,第一個是資料丟上Heroku之後都變成亂碼,但我的MySQL編碼就是UTF8了,實在沒道理,因此就嘗試加上$KCODE的設定,沒想到馬上管用。
第二個問題是資料如何丟到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是一套使用Ruby on Rails所開發的軟體專案管理系統,我自己使用Redmine來追蹤、管理自己手邊的軟體專案已經一年多了,深深感受到Redmine所帶來的便利性。雖然軟體專案管理最終是「人」的管理以及制度如何落實的學問,但一套好的管理工具還是可以有效地提昇團隊合作效率,並且有助於追蹤工作進度。關於Redmine的介紹,改天再另外寫文章介紹(當然網路上應該有許多參考)。
這篇文章著重在如何利用Heroku(號稱提供Rails的雲端運算環境、簡單的部署流程並支援Git)架設免費的Redmine專案管理環境。
環境方面您至少要擁有Rails開發環境、Git版本控制軟體、Ruby gem: Heroku以及Heroku帳號,至於其他需要安裝的Ruby Gems請參考Redmine本身的需求。
此時在瀏覽器中造訪您的Heroku網址應該就會看到正常執行的畫面了。Redmine預設的管理員帳號密碼皆為admin,您可以直接登入開始使用Redmine來做為您的軟體專案管理系統。
P.S. 依照上列步驟安裝後尚無法使用E-mail發信功能(E-mail notifications for any updates),我在自己的主機上是習慣使用Gmail(或是Google Apps下的Mail)來發信免去自行維護郵件主機的麻煩,我猜Heroku上也可以如法炮製,由於這部份我還沒有研究,等下一篇文章再與各位分享。
Posted by (0) Comment
我曾寫過一篇「Rails: 建立Permalink,避免流水號洩漏網站資料」針對有人擔心(或質疑)Ruby on Rails中以資料表主鍵流水號作為URL中的參數,會導致網站洩漏某些不希望被外界一眼看穿的資訊,例如使用者總數或文章總數之類的數據,因此簡單地透過Model在存取資料庫時的before_create方法建立每一筆資料的unique key來避免這個問題。
之前使用Rails 1.2.x版本時根據我當時的作法並無不妥,因為我自己的coding習慣是會完整地指定controller, action以及id,並在對應的action中使用find_by_key的方法來找到資料。
然而,升級到Rails 2.0後便會出現許多麻煩,例如預設產生的scaffold必須修改許多地方,才能讓Model.find_by_key、redirect_to post_url(@post)之類的方法正確運作。
於是我一直到前陣子才找到應該比較正規的作法:在Model中使用to_param方法。
to_param(): Enables Active Record objects to be used as URL parameters in Action Pack automatically.
這麼好用的方法我居然不是一開始就發現,只能說相見恨晚,好險我開發Rails 2.0的時間還不算長,沒走到太多冤枉路。要實踐本標題所說的在Rails 2.0中如何避免在URL使用資料流水號便相當簡單!
1. 建立Scaffold:(通常會對key這個欄位建立index並設定字串長度limit,別忘了:p)
script/generate post title:string content:text key:string
2. 將Post的migration寫進資料庫後修改Post model如下:
class Post < ActiveRecord::Base
before_create :generate_key
def self.find(*args)
if args.first.is_a?(String)
find_by_key(args.shift, *args) or raise ActiveRecord::RecordNotFound
else
super
end
end
def to_param
key
end
protected
# 我前一篇文章產生key的方式不太一樣,這應該是個人習慣。
# 另外,其實亂碼的網址沒有SEO的效益,建議還是弄個slug吧!
def generate_key
require 'digest/sha1'
self.key = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )[15..24]
end
end
就這樣!概念很簡單,就是不再用ID當查詢的參數,全面改用key啦!關鍵就在於使用to_param()方法以及對find做進一步的判斷,因為我除了Model.find(:all)之類的Symbol,其餘的CRUD都是傳入Key作為參數,因此在此僅簡單地判斷是否為字串。
如此一來,不管你是什麼user_posts_url, new_user_post_url都可以輕鬆地直接以ActiveRecord Object傳遞,起碼我之前曾經嘗試用edit_post_url(@post.key)這種方式傳值,非常麻煩、要改Controller又要改View,現在用了to_param(),什麼都不用改了!又優雅又簡單,寫起來更加快樂、效率也提昇了:p
P.S. 其實在Rails 1.2.x應該也是這麼做比較優雅,不限於2.0
Posted by (9) Comment
Ruby Plus是個類似Railscasts的影片收藏站,提供各種Rails(或Ruby)相關的教學影片,例如:如何在Rails 2.0中上傳圖片、如何開發Rails Plugins,或是最近比較熱門的RESTful目前也有幾篇教學影片可以參考。
註:Railscasts因為出來得比較早,教學影片較多,也可參考參考。:D
Posted by (0) Comment
Heroku是一個讓網頁開發人員可以在線上編輯Rails程式的網路服務,目前還在limited beta的階段,有興趣申請的讀者可以到申請網址登記排隊。上一篇文章提到Heroku的幾個特色,這篇文章就登入來玩玩看吧!
初次登入之後會看到如下畫面:
此時尚未建立任何應用程式,點選建立程式之後會轉到另一個網址:http://edit.untitled-22289.heroku.com/,由於尚未對應用程式命名,網址是以流水號加上untitled的方式命名,這是可以設定的。(說不定還支援使用者自行指定domain name?或許將會是個付費服務)。
上圖是應用程式的設定畫面,可以自訂網址、支援協同編輯、匯入/匯出、程式版本快照(簡單的版本控制),至於Other裡面目前只有Destroy一項功能:p
因為內文都是一些截圖,使用起來對我而言也沒有太大的驚喜,所以先講結論吧!
下圖即編輯程式的主畫面:
畫面的構成我就不多做介紹了,基本上在編輯畫面可以看到Rails app的目錄結構、檢視資料庫schema以及Rails的log file,點選右上角的圖示則會馬上跳轉到應用程式執行的頁面,讓你知道目前執行的狀況。
畫面左下角則有幾個寫Rails必備的指令工具:Generator, Console以及Rake
先打開Console模式來玩玩看,點選Console之後會跳到另一個網址,此時出現的是全螢幕的Console畫面,等等再建幾個Model來玩玩看:
Code Generator的畫面:
執行之後也會告知執行結果:
稍微寫一下migration,使用編輯器的感覺是非常不順手,我的作業系統、Firefox都是英文環境,語系也設為en-us,但在編輯器裡面卻會出現游標與實際文字位置無法對齊的狀況,實在是相當奇妙。
先不管它,先migrate上去了!Rake的畫面也是純指令模式,這點就不太親切啦~建議開發團隊可以考慮NetBeans那種IDE懶人用法啊XD
看到這個畫面,我才想起我根本還沒設定database啊XD趕快看看database.yaml如下:
換句話說,heroku目前提供了database而且還是postgresql :p,說不定以後也會是個向使用者索取費用的服務。
接下來建立scaffold讓我的guestbook跑起來吧!
建立完成之後,應該就可以馬上看到程式目前的畫面啦~!
檢視資料庫的畫面可以看到目前有哪些資料表:
也可以直接點進去修改:
點選各個訊息還可以看到更詳盡的資訊。