by winson, 3 months ago.
當您在程式中提供小人頭圖像上傳功能時,搭配Vlad the Deployer八成會出問題,因為Vlad the Deployer會從SVN下載新的版本,並把舊版本整個換掉,亦即使用者的個人圖像統統會消失。
為解決這問題,我們可以善用Vlad the Deployer的語法,首先要做的就是把原先上傳到Rails public目錄的圖檔整個搬移到Web server的目錄下:
mv /your_rails_app/public/user /var/www/user
接著修改該目錄的權限:
sudo chmod -R mongrel:mongrel /var/www/user
於是,我們可以在Vlad the Deployer的設定檔中,增加一個新的Remote task,負責幾件事情:
- 砍掉空的圖像目錄
- 做symbolic link連到/var/www/user
請在您的deploy.rb檔案中,加入以下語法:
namespace :vlad do
def sudo(command)
run [sudo_cmd, sudo_flags, command].join(' ')
end
desc "Setup user photos."
remote_task :setup_photo do
user_path = "#{current_path}/public/user"
sudo "rm -r #{user_path}"
sudo "ln -s /var/www/user #{user_path}"
end
end
這個setup_photo要做的就是,每當遠端程式更新完畢之後,處理一些圖檔目錄相關的動作,於是往後更新版本,都可以保留使用者上傳的所有個人圖像。
by winson, 4 months ago.
Vlad the Deployer這玩意兒簡單又好用,就算有一百台主機分散在全世界,我想透過它來部署、更新系統也是輕而易舉。
但是在實務操作面,還是有幾個問題:
第一、它預設使用Apache,那麼頗受好評的輕量級網頁伺服器lighttpd怎麼辦呢?
第二、它預設執行環境為Production,那麼我要如何在Development環境下跑呢?
第三、每一台主機位址都不同,要在哪裡設定呢?
最簡單的方式是用namespace,如下:
namespace :macmini do
task :settings do
set :domain, "tw.myrails.com"
set :rails_env, "development"
set :web_command, "/etc/init.d/lighttpd"
end
setup_tasks
end
namespace :macpro do
task :settings do
set :domain, "us.myrails.com"
set :rails_env, "production"
end
setup_tasks
end
看到沒?上述三個疑問一下解決掉,包括不同主機位置、不同執行環境與不同的網頁伺服器!!
by winson, 4 months ago.
什麼是CAPTCHA呢?
CAPTCHA是”Completely Automated Public Turing test to tell Computers and Humans Apart”的縮寫,那是一種用來區別使用者是人還是電腦的方式,一般都是產生圖形,讓使用者輸入圖形所代表的文字並加以驗證,主要用途是防止電腦程式灌票,或防止電腦程式登錄大量帳號或灌入大量廣告留言等。
那麼,如何在Rails底下做到CAPTCHA的機制呢?其實解決方式還滿多的,但我個人選擇外掛,通常有幾項要求:
- 不會有系統安全方面的問題
- 程式碼必須漂亮簡單
- 對人類有益
我看過有人推薦Simple Captcha,但我覺得這是最爛的選擇,而且在Ruby On Rails Security Guide一文中也不推薦使用。
by winson, 6 months ago.
就在Mongrel主力開發者Zed Shaw宣佈從此以後退出Ruby界,決定不問世事、金盆洗手之後,一套號稱比Mongrel、甚至Event-drive Mongrel更快的Ruby web server出現了,那就是Thin。
Thin的安裝相當簡單:
sudo gem install thin
也可以搭配Rails使用,只要切換到Rails專案目錄下,然後輸入:
thin start
如果要在背景執行,他的指令跟Mongrel差不多:
thin start -d -p 80 -c /your_rails_dir -P /your_rails_dir/log/thin.pid
跟Mongrel比較起來速度快是不用說,但Thin並未內建cluster,需搭配
Merb或
god才能夠做到cluster。
最後,祝Zed一路好走。
by winson, 6 months ago.
Rails向來以無痛開發、無痛升級著稱,透過gem來安裝Rails無論升級或移除都很簡便;萬一還是不放心,可以先裝到vender目錄下試試。雖然沒什麼大問題,不過還是有些小地方須注意:
有些報告指出,可能因為gem版本的問題導致無法安裝新版Rails。
新版gem最大的優點是,以往安裝gem需要加上-include-dependencies選項,以便同時安裝相關的gem,現在已經變成預設指令了,也就是說只需要輸入
sudo gem install xxx
就已經含有—include-dependencies選項,真是方便的很。
by winson, 7 months ago.
最近寫點小程式,客戶拜託我其中某個table不要用Rails內建的key,這不是新增一個key就好的問題,而是要用指定的格式當key。
好,從設計的角度來看,格式如何先不管,這個key的值除了生成的那一刻之外,往後都不可隨意變更,不只從view無法變更,甚至要防止程式不小心修改到,這才有資格作為一個key。
先看Rails是否內建防止某個欄位遭到修改的保護機制。這時候,第一個想到的自然是attr_protected:
by winson, 7 months ago.
每一位程式員都討厭測試,相較於寫程式時那種解題的快感,測試簡直百般無聊。那麼,為什麼要測試?目的是為了程式碼的品質,品質不單單是測試人員的事,那是程式員基本的責任。
測試等於是一種背書,證明程式的任何環節毫無問題;測試可以帶給程式員信心,所以只要是我寫的程式,我就願意負責,而且我一定會對我寫的程式感到驕傲!!
先看看為何要用RSpec來進行測試,難道在Rails裡頭用他基本的unit test來作不行嗎?當然可以,只是測試的風格不同而已,但我認為風格很重要,風格可以改造想法,而想法可以改造程式!!
by winson, 8 months ago.
Ruby on Rails對全世界最大的貢獻不在於產生多少容易維護的程式碼,而在於把簡潔易用的觀念深植人心。
因為程式員透過簡單易用的Ruby on Rails開發各種程式,於是創造出Twitter、Radiant、Mephisto等傑出的應用,而Vlad the Deployer則是另一個強調簡單易用的傑出工具。
相較於威力強大的Capistrano,Vlad the Deployer是一套極為簡單的自動化部署工具,特別是當您使用Mongrel, Apache, Subversion環境時,更是輕鬆愉快。
那麼,Vlad the Deployer可以幫助我們做什麼?
by winson, 9 months ago.
十月初,Rails終於發佈小改版升級到1.2.4,距離上次1.2.3發佈也經過半年了。
這次1.2.4升級幅度並不大,主要是一些安全修正。
在Rails環境底下,如果一切都是透過gem安裝的話,版本升級其實是相當簡單的事情:
gem update rails
基本上,gem的設計相當貼心,舊版本的寶石都會一一保留下來,這就是為什麼在gem list清單看到的寶石,都有好幾個不同版本的原因。
萬一您一時手癢升級,卻導致某些外掛模組無法運作的話,那該怎麼辦呢?要移除也是非常簡單的事情:
gem uninstall rails
這時候,您的Rails就會以上個版本,也就是1.2.3來運作,絲毫不會影響系統的任何功能。
by winson, 10 months ago.
還記得當年捧著
設計模式聖經挑燈夜戰的心路歷程嗎?還記得當年學設計模式的目的嗎?還記得設計模式告訴我們什麼嗎?喔,我差點忘了,他的特點是:
- 重複使用設計過的軟體元件
- 快速解決問題
- 促進良好溝通
無論抱持什麼樣的目的,設計模式要做的就是用一致的解法,解決軟體設計上重複出現的問題,其實還是老話一句,不要重新發明輪子。
但,真的是這樣嗎?真的不用重新發明輪子嗎?有沒有想過設計模式真的有解決問題嗎?有沒有想過設計模式帶來的問題,其實多過他所解決的問題?