2006年12月31日 星期日

[Rails.example] count

ref

Person.count("age > 26")

Person.count('id', :conditions => "age > 26")
# Performs a COUNT(id)

Person.count(:all, :conditions => "age > 26")
# Performs a COUNT(*) (:all is an alias for '*')

Person.count(:conditions => "age > 26 AND job.salary > 60000", :include => :job)
# because of the named association, it finds the DISTINCT count using LEFT OUTER JOIN.

Person.count(:conditions => "age > 26 AND job.salary > 60000", :joins => "LEFT JOIN jobs on jobs.person_id = person.id")
# finds the number of rows matching the conditions and joins.

Associations on Rails

API

EXAMPLES

Member.find(:all, :include=>[:group, :profile])

Member.count(:joins=>"INNER JOIN groups ON groups.id = members.group_id ...")

Rails & Java

2006年12月21日 星期四

Rails Localization

reference

1.gem install gettext

2.application.rb
require 'gettext/rails'
GetText.output_charset = "UTF-8"

3.Error Message 中文化

4.app/test.rb
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

5.config/enviorment.rb
require "#{RAILS_ROOT}/app/test.rb"

2006年12月16日 星期六

2006年12月14日 星期四

2006年12月12日 星期二

tinyint in Rails

By default, the MysqlAdapter will consider all columns of type tinyint(1) as boolean. If you wish to disable this emulation (which was the default behavior in versions 0.13.1 and earlier) you can add the following line to your environment.rb file:

ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans = false

2006年12月5日 星期二

TOMCAT最佳化

資料來源:
1.Tomcat性能調整
2.java.lang.OutOfMemoryError
3.JVM調整機制

以下針對體院的系統最佳化:
1.catalina.bat
  Tomcat默認可以使用的記憶體為128MB,在較大型的應用項目中,這點記憶體是不夠的,需要調大。

  在文件{tomcat_home}/bin/catalina.bat,增加如下設置:

  JAVA_OPTS='-Xms【初始化記憶體大小】 -Xmx【可以使用的最大記憶體】'

  需要把這個兩個參數值調大。例如:

  JAVA_OPTS='-Xms256m -Xmx512m'

  表示初始化記憶體為256MB,可以使用的最大記憶體為512MB

在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m


JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

2.server.xml
Tomcat5


maxThreads
Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。

acceptCount
指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。

connnectionTimeout
網路連接超時,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。

minSpareThreads
Tomcat初始化時創建的線程數。

maxSpareThreads
一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。

3.調整JVM之參數

  -Xms,-Xmx一般設為同樣大小。 800m

  -Xmn 是將NewSize與MaxNewSize設為一致。320m

  -XX:PerSize 64m

  -XX:NewSize 320m 此值設大可調大新對象區,減少Full GC次數

  -XX:MaxNewSize 320m

  -XX:NewRato NewSize設了可不設。4

  -XX: SurvivorRatio 4

  -XX:userParNewGC 可用來設置並行收集

  -XX:ParallelGCThreads 可用來增加並行度 4

  -XXUseParallelGC 設置後可以使用並行清除收集器

  -XX:UseAdaptiveSizePolicy 與上面一個聯合使用效果更好,利用它可以自動優化新域大小以及救助空間比值