8/31/2006

About Me

我是誰?

我叫 thegiive,網頁程式設計師一名,喜歡簡捷有力的東西。Ruby 是我最愛的語言,Ruby on Rails 是目前最好的網頁設計框架。要聯絡我請寄信到

8/27/2006

很棒的 Ruby Clouse Tutorial

原始URL在此
下面是 nopaste產生的 highlight code

8/26/2006

Rails 取名的一些禁忌

今天寫 Rails 寫到一半,突然發現出現
wrong number of arguments (0 for 1)
然後整個 controller 裡面的頁面都出現同一個 Error。之前寫的同一個controller, 裡面正常的頁面全部都不能 work,全部都覆蓋在這個Error之下。

經過這一個文章的講法 ,我發現到我的 controller 裡面有個 action 叫做 send,這是 ActionController 裡面的 function,Ruby 以為我要 Overridden 這個 function,所以才有這種情況。

有些錯誤不實際去做還真的不知道,Rails 有一些取名的禁忌,都記載在這頁,這裡列出一些常犯的method name , 這些是絕對不能取的
  • display
  • format
  • load
  • send
  • system
  • process
  • timeout
有些名字是 DB 裡面的column不能取的
  • notify
  • open
  • quote
  • type

sqlite : 雞刀還是牛刀?

殺雞焉用牛刀是 sqlite 最常用的推銷詞
這告訴我們 sqlite 的特質
當你只需要簡單的 DB 功能時
你是要花大量的 memory 在 mysql 上面呢
還是簡單的安裝 370 KB 大小的 sqlite
最近開始研究 sqlite ,發現素來稱為雞刀的他
似乎並沒有想像中的那麼陽春...

他的優點在於
  • 佔 Mem 小,x86 + GCC Compiler 可以低到 170 KB
  • 簡單SQL 指令速度相當快,速度比較可以看這頁
  • 支援 SQL Standrad度高,包括 view table,transation都有支援 li>
  • 不用 configure,直接用
  • 一個DB就是一個file,所以備份 DB ,就是備份 file。也能用 subversion 去做DB version controll
  • 每個 row 不用指定 data type,有 ruby 的 duck typing的感覺
  • 許多語言native support
  • unicode support 良好

他的給我的感覺很好,輕巧快速功能又不錯
中小型 Application 可以盡情使用 sqlite的好處
又沒有其他 DB 的肥大
MAC OS X 可算是相當挺 sqlite
裡面許多 Application 都是直接使用內建的 sqlite3 當作backend db
在許多 db 動折 5X mb 以上的肥大之中(沒錯,我在說 MySQL)
他可說是一股清流呀
總之,這是一個值得研究的 db

lighttpd mod_auth 使用方式

本網頁取自 此頁
記載著 lighttpd 的 auth 方式
當你研發一個網頁時 , 你通常需要 auth 來保證你的研發機密不會被 Google 找到 XD
lighttpd config
  • 在 lighttpd.conf 加入 mod_auth

  • 在 mod_auth 裡面加入
    auth.debug = 2
    auth.backend = “plain”
    auth.backend.plain.userfile = “/home/lighttpd/.lighttpdpassword”

    裡面的 auth.backend.plain.userfile = “/home/lighttpd/.lighttpdpassword”
    代表 password放置的放置的 file location

  • 加入
    auth.require = ( “/docs/” =>
    (
    “method” => “basic”,
    “realm” => “Password protected area”,
    “require” => “user=aaa”
    )
    )

    “require” => “user=aaa”代表 /doc 只有 aaa 這個人可以登入


建立 password file
vi /home/lighttpd/.lighttpdpassword
在裡面寫入

aaa=password


並且將這個 file 設為只有 lighttpd 可以讀

一開始 Application Error 的問題

當你在開發Rails 程式的時候,突然會發現『疑,他不動了』...畫面上還出現
Application error

Change this error message for exceptions thrown outside of an action (like in Dispatcher setups or broken Ruby code) in public/500.html
假設一開始初始化你的 Project ,就有 Application Error 問題,通常問題是出現在
  • 權限
  • Ruby on Rails 的環境架設錯誤
這兩個部份。權限部份請確定你的 log/ tmp/ 資料夾權限都是可讀寫,並且請確認你跑的 Web Server 可以讀寫到這兩個資料夾。意思就是說,如果當你使用 lighttpd ,系統通常都會用 lighttpd 這個 user 來啟動 lighttpd,請確認 lighttpd 這個 user 是否可以讀寫 log/ tmp/ 。如果你使用 webrick,你只要確認你現在使用者有權限可以讀寫即可。

如果你對於我講的話霧撒撒的,一個小建議是你先一開重新建立一個新的 Rails 資料夾
rails test
進入這個資料夾,不要切換任何使用者,強迫使用 Webrick 啟動
ruby script/server webrick
之所以要這麼作是因為 script/server 會偵測有沒有 lighttpd ,如果有就會自動改成 lighttpd 啟動。只有在後面加入 webrick ,才會強迫使用 webrick 來啟動 Rails 。通常只要這樣作,絕對沒有權限的問題。

你可以試試看使用 webrick 開啟可不可以動,如果用 webrick 可以用,但是 apache 或是 lighttpd 不可以用,很有可能是lighttpd 或是 apache 沒有存取 tmp/ log/ 的權限問題。

解決方式:

你可以試試看,將 rails 目錄下面的 tmp 目錄修改權限(就是改成web server 的使用者,這裡的範例是 lighttpd )
chonw -R lighttpd tmp/ log/


Rails 上面 Error Message 中文化

Rails 有一點設計的不夠完善
就是 i18n 的問題
當然這個問題可以用 gettext 去解決
不過 , 如果有更簡單的方式 , 也是不錯的
到目前為止
Model 裡面的 Validate Error 目前是官方無解的
所以我就從 Rails Wiki 裡面找出了不錯的解法
第一個連結
第二個連結
老師有說過
好的設計帶你上天堂, 不好的設計帶你住套房
Rails 以 Ruby 當作中心語言雖然沒有到上天堂的程度
但是 Ruby 的 Open Class 的特性
卻讓這個解法不需要動用到Rails目錄裡面去修改 Source Code
可說是相當有趣的解法

寫下列的程式在 你的 app 目錄下面
module ActiveRecord
class Errors
begin
@@default_error_messages.update( {
:inclusion => "ist nicht in Liste g羹ltiger Optionen enthalten",
:exclusion => "ist reserviert",
:invalid => "ist ung羹ltig",
:confirmation => "entspricht nicht der Best瓣tigung",
:accepted => "muss akzeptiert werden",
:empty => "不能是空的",
:blank => "darf nicht leer sein",
:too_long => "ist zu lang (h繹chstens %d Zeichen)",
:too_short => "ist zu kurz (mindestens %d Zeichen)",
:wrong_length => "hat eine falsche L瓣nge (es sollten %d Zeichen
sein)",
:taken => "ist schon vergeben",
:not_a_number => "不能是空的",
})
end
end
end

module ActionView #nodoc
module Helpers
module ActiveRecordHelper
def error_messages_for(object_name, options = {})
options = options.symbolize_keys
object = instance_variable_get("@#{object_name}")
unless object.errors.empty?
content_tag("div",
content_tag(
options[:header_tag] || "h2",
"一共有 #{pluralize(object.errors.count, "error")} 問題 "
) +
content_tag("p", "請更正:") +
content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }),

"id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
)
end
end
end
end
end

然後,
config/enviorment.rb 加入

require "#{RAILS_ROOT}/app/你的filename"
成品如下圖


Rails 裡面自訂 Date time 檢查

如果你用自訂的變數來寫 Datetime 進 Rails 資料庫
但是又想檢查不合法的 Date
你可以使用
Date.civil(@params[:date][:year].to_i,@params[:date][:month].to_i,@params[:date][:day].to_i)
來檢查

8/16/2006

Lighty RoR

Lighty RoR 是我為 Lighttpd + Ruby on Rails + SQLite 取的名字
意思就是輕薄有力的Web Programming 套件

lighttpd 是目前最好的輕量化 web server
Ruby on Rails 是目前研發速度最快,code也可是最少的 Framework
SQLite 是目前最輕巧,但是功能跟速度都屬上乘的 Database

這個Blog的目標就是介紹這組我最喜歡的組合給大家