http://www.noobkit.com/

這個線上文件庫資料豐富,查找方式也很方便。

如果在linux下run Ruby on Rails的ap看到這個錯誤

那麼

請修改config/database.yml,針對所需要的資料庫,加入
  socket: /var/lib/mysql/mysql.sock

當然,那個mysql.sock的路徑,要視實際環境而訂

shell下下 mysql指令,然後打 status就可看到。

遇到client denied by server configuration: proxy:balancer://mongrel_cluster/error/HTTP_FORBIDDEN.html.var的問題。

Google仍然是最佳的朋友 – 以下是相關有用的資源。

1. http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/

2. http://blog.wishlisting.com/?p=20

我的問題發生在 apache 關於mod_proxy 的設定,

因此必須在vhost設定的部份關於Proxy balancer的部分加上兩行,如下:

<Proxy balancer://mongrel_cluster>
BalancerMember http://127.0.0.1:8000
BalancerMember http://127.0.0.1:8001
Order allow,deny
Allow from all
</Proxy>

這樣就OK了。

1. 拷貝或建立設定檔連結到etc

as root,

mkdir /etc/mongrel_cluster

ln -s /你的rail應用程式路徑/config/mongrel_cluster.yml /etc/mongrel_cluster/自訂名字.yml

2. 拷貝啟動檔到 /etc/init.d

cp /mongrel_cluster gem的路徑/mongrel_cluster_gem/resources/mongrel_cluster /etc/init.d/

*如果不知道在哪裡,可$ find / -name mongrel_cluster -print

3. 修改屬性為可執行,並修改裡面關於USER的內容

chmod +x /etc/init.d/mongrel_cluster

vi /etc/init.d/mongrel_cluster

找到USER= mongrel這行

改成你要跑這個app的user id。

4. 把服務打開

chkconfig mongrel_cluster on

 5. 測試

service mongrel_cluster start

curl -I http://localhost:8001

6. 如果像我一樣,ruby裝在 /usr/local/bin

那麼會需要以下動作,否則服務也起不來,會有/usr/bin/env: ruby: No such file or directory
的錯誤。

ln -s /usr/local/bin/mongrel_rails /usr/bin/mongrel_rails

ln -s /usr/local/bin/ruby /usr/bin/ruby

1. 安裝,as root

$ gem install –include-dependencies mongrel
$ gem install –include-dependencies mongrel_cluster

2. 設定

$ mongrel_rails cluster::configure -e production -p 8000 -a 127.0.0.1 -N 2 -c /source的路徑

-a 聽這個 ip

-N 啟動幾個mongrel instance

-c 啟動的rails程式路徑

3. 啟動 mogrel cluster

mongrel_rails cluster::start

4. 測試有沒有開起來

$ curl -I http://127.0.0.1:8000
HTTP/1.1 200 OK
Connection: close
Date: Fri, 17 Aug 2007 10:31:56 GMT
ETag: “46c0d832-1d80″
Last-Modified: Mon, 13 Aug 2007 22:16:18 GMT
Content-Type: text/html
Content-Length: 7552

 5. 關閉mogrel cluster
mongrel_rails cluster::stop

OK了…

寫下主觀的意見,也正在實驗中,可討論指教。

我的設定前提是,一個有機會長大的web 2.0網站,但是初期投資與maintain的成本盡量壓低。設定網站的流量目標是Alexa排名約一萬名,伺服器回應速度與頻寬回應不讓使用者感覺陽春,整體設備環境有企業級架構,雖非企業級水準。

台灣的頻寬是貴的。租用shared hosting對於一個有成長企圖心的網站限制太多,給的流量太小。租用dedicate server也是不小的花費,而且通常得簽一年約。採用國外hosting方案,因主機在國外,回應速度並不甚佳。

因此,可採用書房創業法。用ADSL+便宜硬體+無比的耐心與技術來開始。

 規劃與費用大概估算如下

1. 硬體

* 2台 Web Server:採用二線品牌準系統,我目前用技嘉的ST000,散熱效果看起來不錯,燒機程式讓loading飆到22,溫度也沒上升。

透過網路上拼湊,1G RAM,2顆160G ATA硬碟,加一張網路卡,一台一萬圓有找。這種機器有安靜,體積小的優勢,適合放在書房。

這兩台上面還應該跑 mail服務,DNS服務與一些Batch的工作,,並備份DB上的資料。

* 1台DB Server:同上規格,把ram加到2G,不須加網卡,一台一萬圓左右。

上面可用來作version control,備份web上的資料。

* 一個多WAN口的in-bound/out-bound 負載平衡路由器:大概一萬五左右。

用作ADSL撥接、防火牆、IDS、switch、頻寬分散器。

*選購:如果錢再多,買個UPS,風扇…等。

2. 軟體

* Linux,免費

* Apache/MySQL/Ruby On Rails/Bind/Postfix/…,免費

3. 頻寬

兩條Hinet 4M/1M企業ADSL固三IP方案,一個月約1,600~1,700,兩條約3,300/月。

或採用兩家不同的ADSL,試著做頻寬的備援。

 4. 人力

看你要發多少薪水,這部分自行估算。

5. 電費

一個月1000元為上限(每台電腦假設200W左右)。

 分兩階段進行

第一階段:一台電腦,一條ADSL,購買負載平衡器,頻寬1M。

開辦費用:兩萬五(電腦+負載平衡器)。

每月固定支出:兩千元(ADSL+電費)+薪資。

三個月後,第二階段:添購兩台電腦與新的ADSL,完整Web-Database架構,頻寬增為2M,並有效提升頻寬備援性。

費用:兩萬元。

每月固定支出:四千元,跟定期定額買基金一樣。

 優點陳述

1. 開辦費用低,每月支出低。

2. 主控性高,具有高彈性。

3. 完整架構,未來移轉機房容易。

4. 適當的頻寬,可應付較大流量需求,並可視情況擴充至4M。

5. 冬天來了,書房的三台Server可當暖器使用。

 需考慮

1. 技術維護管理能力,本部份需要多讀書,多操作。

2. ADSL是否能跑到1M,須先詢問,再行裝設。

透過4M/1M或8M/768k的ADSL,一般工程師都可輕易架出小型流量網站。

遇到要架設中型,到大型流量的網站,服務水準要ok,而又要能夠省cost的方案是我目前在探究的方向。

頻寬問題處理:

目前看到最大的ADSL頻寬是12M/1M。如尚不考慮有條件限制的光纖服務,若要1M以上的對外流量,勢必要架設兩條以上的ADSL來分散流量。

考慮是架站,而非架設網咖或宿網服務。因此需透過in-bound load balancer的概念來實質達到將進來網站的流量分散到不同的ADSL上。

最簡單的作法是在DNS Server上,設定超過一個以上的dns正解,並把TTL時間做調整。

假設網域名稱是 foo.bar,可在DNS Server上對這個名稱設定多個A Record,如

foo.bar. 60 IN A 123.45.67.8    # Hinet ADSL   固定IP
foo.bar. 60 IN A 123.45.67.9    # Giga ADSL 固定IP

TTL的時間調短,那麼有人想連上http://foo.bar時,就會來詢問他的IP位址,IP會隨機給予,就可將流量分散到不同條ADSL上面。

這種 DNS RoundRobin分散流量的作法,有眾多的缺點,無法做到實質的負載平衡。

購買多WAN口具in-bound load balancing功能的路由器

看了網路上幾個產品,例如TAMIO 1600 4 Wans 自動雙向負載平衡器 ,價格還可以接受,而且支援4 port,有機會用ADSL做到in-bound 4M的頻寬。透過內建DNS Server,加上一些演算法,在流量分散上面,可以做到比較好的結果。

有無針對ADSL連線作流量分散的solution?

因為我有拉Giga的ADSL,所以遇到這個額外的問題。沒用Giga ADSL的人或許不知道,Giga跟Hinet因為費用的關係,兩者機房沒有專線連通。如果站台架設在Giga,Hinet的User連上來有時會覺得超慢。

針對我的環境,如果我有一條Giga ADSL,與一條Hinet ADSL的線路,我想讓DNS Server遇到來自Giga DNS詢問時,回應我這邊Server的Giga IP。而遇到剩下的DNS詢問時,回應我這邊Server的Hinet IP。也就是讓來自使用Giga ADSL的使用者,總是走我的Giga ADSL進來我的網站。而使用其他連線的使用者,總是透過我的Hinet ADSL進來我的網站。

這應該可透過Bind的修改或設定來作,但目前尚未讀書,google了一陣子亦尚未看到有人這麼做。持續研究中…

 

用Aptana作為Ruby on Rails的開發IDE,用了幾個禮拜了,感覺不到比起先前的RaidRails有很大的進步。

現在想建立cvs環境,發現Aptana並無內建支援cvs plugin,google了一下,放棄。改使用他的Sync Manager,透過ftp或sftp的方式來同步資料,做備份或上傳用。

我先備份大約15G的資料,透過ftp傳到server上。結果aptana新開啟的同步預覽java視窗,吃掉了大部分的cpu 資源。

15G的資料透過11M的wireless要傳很久,但我的XP筆記型電腦被這個視窗拖著,不太能作業,滑鼠移動會延遲。因此 ctrl+alt+del,找到拖慢速度的程序(某個javaw),把他的優先權調整為"低",弄成背景在跑,電腦操作速度才恢復正常。

Aptana還有甚多要改進的地方。

安裝 capistrano時,遇到以下問題,google看不到什麼資料。

#gem install –include-dependencies capistrano
ERROR:  While executing gem … (Gem::InstallError)
    invalid gem format for /usr/local/lib/ruby/gems/1.8/cache/needle-1.3.0.gem

試了兩次後,決定rm /usr/local/lib/ruby/gems/1.8/cache/needle-1.3.0.gem

再重新執行gem install,結果就裝好了。

或許是下載的過程中,有什麼傳輸上的閃失吧。

一陣子沒碰linux administration ,為了裝mysql,這才注意到urpmi的好用。

與其自己不斷的確認安裝A rpm,其dependency是什麼B, C, D…rpms,不如就下這麼一個指令

#urpmi MySQL
To satisfy dependencies, the following packages are going to be installed:
MySQL-5.0.37-2mdv2007.1.i586
MySQL-client-5.0.37-2mdv2007.1.i586
MySQL-common-5.0.37-2mdv2007.1.i586
libmysql15-5.0.37-2mdv2007.1.i586
perl-DBD-mysql-4.003-1mdv2007.1.i586
perl-DBI-1.54-1mdv2007.1.i586
perl-HTML-Parser-3.56-1mdv2007.1.i586
perl-HTML-Tagset-3.10-2mdv2007.1.noarch
perl-URI-1.35-4mdv2007.1.noarch
perl-libwww-perl-5.805-3mdv2007.1.noarch
Proceed with the installation of the 10 packages? (46 MB) (Y/n)

 安裝起來超順利。所謂,工欲善其事,必先利其器。