8/31/2006
8/27/2006
8/26/2006
Rails 取名的一些禁忌
今天寫 Rails 寫到一半,突然發現出現
經過這一個文章的講法 ,我發現到我的 controller 裡面有個 action 叫做 send,這是 ActionController 裡面的 function,Ruby 以為我要 Overridden 這個 function,所以才有這種情況。
有些錯誤不實際去做還真的不知道,Rails 有一些取名的禁忌,都記載在這頁,這裡列出一些常犯的method name , 這些是絕對不能取的
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
sqlite : 雞刀還是牛刀?
殺雞焉用牛刀是 sqlite 最常用的推銷詞
這告訴我們 sqlite 的特質
當你只需要簡單的 DB 功能時
你是要花大量的 memory 在 mysql 上面呢
還是簡單的安裝 370 KB 大小的 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 config
建立 password file
vi /home/lighttpd/.lighttpdpassword
在裡面寫入
並且將這個 file 設為只有 lighttpd 可以讀
- 在 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 程式的時候,突然會發現『疑,他不動了』...畫面上還出現
如果你對於我講的話霧撒撒的,一個小建議是你先一開重新建立一個新的 Rails 資料夾
你可以試試看使用 webrick 開啟可不可以動,如果用 webrick 可以用,但是 apache 或是 lighttpd 不可以用,很有可能是lighttpd 或是 apache 沒有存取 tmp/ log/ 的權限問題。
解決方式:
Application error假設一開始初始化你的 Project ,就有 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
- 權限
- Ruby on Rails 的環境架設錯誤
如果你對於我講的話霧撒撒的,一個小建議是你先一開重新建立一個新的 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 裡面找出了不錯的解法
第一個連結
第二個連結
老師有說過就是 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
你可以使用
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的目標就是介紹這組我最喜歡的組合給大家
意思就是輕薄有力的Web Programming 套件
lighttpd 是目前最好的輕量化 web server
Ruby on Rails 是目前研發速度最快,code也可是最少的 Framework
SQLite 是目前最輕巧,但是功能跟速度都屬上乘的 Database
這個Blog的目標就是介紹這組我最喜歡的組合給大家
訂閱:
文章 (Atom)