capistrano
- Home
- 關(guān)於本站
- 關(guān)於筆者
什麼都破,什麼都爛,什麼都不奇怪
Rails & Ruby 13 Aug 2010 05:32 pm
推到 Twitter!
推到 Plurk!
Best practices of building Rails production enviorments ( on Debian / Ubuntu)
這一篇其實(shí)是 2010 Ruby on Rails 書單 與 練習(xí)作業(yè) 中佈署篇的「官方版答案」。
* 租一臺(tái) VPS,挑選 Ubuntu 或 Debian 的 Latest 版本。
* 按照 http://github.com/jnstq/rails-nginx-passenger-ubuntu 將整臺(tái)環(huán)境架起來。
!! 需要特別注意幾點(diǎn) !!
- Debian 有一些 command 需要特別 apt-get 安裝。查一下應(yīng)該就有。雖然 Debian 比較麻煩點(diǎn),但我還是推薦 Debian 而不是 Ubuntu,主要是些微的效能問題,Ubuntu 總是 heavy 一點(diǎn)。選擇 Debian / Ubuntu 是因?yàn)?package 比較新以及完整的原因。
- 絕對禁止 apt-get install ruby-full
- 注意 ImageMagick 必須依照指示用手動(dòng) compile 的。而非用 apt-get install imagemaigck。
- 注意 請每一步都照 recipes 上的指示安裝。不要異想天開跳過,否則後果自負(fù)..
接著
* 使用 capistrano deploy 專案。
- 在 production 機(jī)器上開設(shè) deploy 用帳號(hào) apps,把自己的 public key 丟上 apps 這個(gè)帳號(hào)的 ~/.ssh/authorized_keys 裡。
- 在 development 環(huán)境下對 project 下 capify .
- 編寫 config/deploy.rb 檔,這是 example: http://gist.github.com/522282
- cap deploy:setup, 然後上機(jī)器去設(shè) shared/ 下的 config。(請注意,不要把 database.yml 等等具密碼的 config 也 commit 進(jìn)專案,應(yīng)設(shè) .gitignore 迴避掉)。production 需要的 database.yml 請從 shared/ 下 ln 過去。
===
- 常見 Q & A
Q: 為什麼不使用 FreeBSD / Linux 其他 distribution?而且看起來這套作法,與原先的 package system 脫節(jié)?
A: 有很多原因。舉一些例好了:
(1) [ gem 版本的問題 ]
FreeBSD 上提供的 ruby 與 rubygem 版本也許足夠純 ruby 開發(fā)使用。但對於 rails production 遠(yuǎn)遠(yuǎn)不夠,這是因?yàn)?rails 需要的一些關(guān)鍵工具,版本速度很快,而且往往需要相當(dāng)新穎的 rubygem 版本才能夠使用。( 如 Bundler 需要 gem 1.3.7+ 等等…)。但通常一些人使用 FreeBSD 的使用習(xí)慣通常是非用 ports 不可…
(2) [ 特定 gem 的地雷問題]
再來是,比如說中雷機(jī)率蠻高的 Rmagick 這個(gè) gem,地雷很多。通常是用 OS package management system 裝的 ImageMagick,再來裝 Rmagick,大概裝十次,有九次是完全不能跑的 !!!!! 而且,使用 apt/yum 安裝的 ruby-XXXX,通常是綁死原先的 apt/yum 的 dependency,越到後面這些相依性就會(huì)越來越混亂,混亂到無法收拾
(3) [特定 gem 版本綁死特定套件的版本]
比如說 xapian 這個(gè) search engine,gem 版本號(hào)與 package 版本是一對一,互不相容啊 \_/。這時(shí)候用 pacakge system 就會(huì) /_\
[[ 不過就算我在這裡廢話這麼多,你也不會(huì)聽,等你中大獎(jiǎng)才會(huì)覺得我中肯。習(xí)慣了...]]
所以實(shí)務(wù)上會(huì)建議,ruby 與 gem 完全與 package management system 脫節(jié),至於特殊的套件安裝,用 chef 去控管。37signals 幾個(gè)月前也釋出了他們的 chef 的 cookbook。
Q: 不過,這樣聽起來在最糟糕的情況下還是可能產(chǎn)生一股「無法用系統(tǒng)」管理的混亂?那怎麼辦…
A: 37signals 2007 年之後的作法,改採 deploy VM 的方式去做。與傳統(tǒng)佈署的方式想法不同,買來一臺(tái)大機(jī)器,並不是一臺(tái)灌一個(gè) OS,而是一臺(tái)切 8 個(gè) VM,做 8 個(gè)一模一樣的環(huán)境。這樣雖然效能上會(huì)「有一點(diǎn)犧牲」,但是可以大幅減少「人工」(更新套件系統(tǒng),處理 dependency 上的 effort)。畢竟「機(jī)器的價(jià)格」相較起「人的薪水」便宜太多了。
Q: 為何要使用 capistrano?
A: 因?yàn)轳R有失蹄,人有錯(cuò)手啊。孩子…而且打個(gè) cap deploy:rollback 就可以繼續(xù)回去睡,明天上班再修,那多好 …
Q: 為什麼要使用 ruby enterprise edition 和 mod_rails 啊?
A: 這次認(rèn)真一點(diǎn)回答吧。ruby enterprise edition 吃的 ram 比較少,效率上也好一些。至於 mod_rails 是因?yàn)楣芾矸奖恪gain,機(jī)器比較便宜,人比較貴….
Q: 為什麼要使用這個(gè) recipes 啊?
A: 這是整個(gè)社群踩完雷之後累積的最佳實(shí)踐啊(淚)
Q: 用 capistrano / chef / bundler 有這麼重要嗎?
A: 有。它可以幫助你將傳統(tǒng)上沒有辦法進(jìn)版本控制系統(tǒng)的「專案外部環(huán)境」,簡化到檔案等級(jí),那麼就可以繼續(xù)用版本控制系統(tǒng)管理了。
Q: 把所有東西進(jìn)版本控制有這麼重要嗎,我不覺得耶?
A: 那是因?yàn)槟氵€沒長大 -_-|||… 長大你就懂了。
This work is licensed under a Creative Commons Attribution-Share Alike 2.5 Taiwan License. [本文採 cc-by-sa 授權(quán),白話意思就是可以直接轉(zhuǎn)走,但是要附出處與作者)]
7 Responses to “Best practices of building Rails production enviorments ( on Debian / Ubuntu)”
on 13 Aug 2010 at 6:02 pm 1.Tweets that mention Blog.XDite.net ? Best practices of building Rails production enviorments ( on Debian / Ubuntu) -- Topsy.com said …
[...] This post was mentioned on Twitter by xdite and Ryo, KIKA. KIKA said: 來的太是時(shí)候(感淚 RT: @xdite: Best practices of building Rails production enviorments ( on Debian / Ubuntu) http://blog.xdite.net/?p=1807 [...]
on 13 Aug 2010 at 9:05 pm 2.clsung said …
# $FreeBSD: ports/devel/ruby-gems/Makefile,v 1.35 2010/05/26 06:32:18 pgollucci Exp $
PORTNAME= gems
PORTVERSION= 1.3.7
on 13 Aug 2010 at 9:30 pm 3.xdite said …
現(xiàn)在已經(jīng)是 1.3.8 了 XD
on 13 Aug 2010 at 10:56 pm 4.clsung said …
http://rubygems.org/ 上還是 1.3.7 啊
http://rubyforge.org/frs/?group_id=126
也是 1.3.7?_?
on 13 Aug 2010 at 11:02 pm 5.clsung said …
http://github.com/rubygems/rubygems 上面也是寫 1.3.7 official?
# 1.3.7 is official enough for me!
% head http://github.com/rubygems/rubygems/blob/master/ChangeLog
# -*- coding: utf-8 -*-
2010-07-10 Luis Lavena
* lib/rubygems.rb: Expand Windows user home canditates for Ruby 1.8
Bug #28371
2010-05-13 Eric Hodel
* lib/rubygems.rb: 1.3.7.
on 13 Aug 2010 at 11:17 pm 6.xdite said …
sorry, 我搞錯(cuò)了。這個(gè) case 應(yīng)該是講一個(gè) 1.3.6 一個(gè) 1.3.7。不過 ports 版本的 rubygem 版本跟不上(有一陣子 ports 的 rubygem 版本真的很落後)實(shí)在很困擾。
因?yàn)楸热?rack, bundler 都會(huì)有限 rubygem 版本。所以比較好的處理方式就是把整套 ruby 都拔出來做…
on 13 Aug 2010 at 11:30 pm 7.clsung said …
In such cases, blame ports committers XD
Trackback This Post | Subscribe to the comments through RSS Feed
Leave a Reply
Name (必填)
Mail (不公開,必填)
Website
最新文章
- 使用 dropbox 當(dāng)企業(yè)公槽
- Google...意圖使人不當(dāng)選 !? XD
- Catan Histories: Settlers of America 中文規(guī)則
- Catan Histories: Settlers of America
- Google Devfest Taipei ...確認(rèn)...取消!!
- Amazon EC2 推出 micro instance
Current Jobs
VeryXD : Founder HTC : DeveloperBlog.XDite.net ? 2010 | Shaded Grey made free by Flowerpot.com | Powered By WordPress
hemidemi_4a241ef15e6aff952f172acd9ee4050687a4ee26
總結(jié)
以上是生活随笔為你收集整理的capistrano的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Symbian,倒在3G的门槛上
- 下一篇: 圣诞日记2010-12-25:认清形势,