• Home
  • 關於本站
  • 關於筆者

什麼都破,什麼都爛,什麼都不奇怪

Rails & Ruby 13 Aug 2010 05:32 pm

推到 Twitter!

推到 Plurk!

Best practices of building Rails production enviorments ( on Debian / Ubuntu)

這一篇其實是 2010 Ruby on Rails 書單 與 練習作業 中佈署篇的「官方版答案」。

* 租一台 VPS,挑選 Ubuntu 或 Debian 的 Latest 版本。
* 按照 http://github.com/jnstq/rails-nginx-passenger-ubuntu 將整台環境架起來。

!! 需要特別注意幾點 !!
- Debian 有一些 command 需要特別 apt-get 安裝。查一下應該就有。雖然 Debian 比較麻煩點,但我還是推薦 Debian 而不是 Ubuntu,主要是些微的效能問題,Ubuntu 總是 heavy 一點。選擇 Debian / Ubuntu 是因為 package 比較新以及完整的原因。
- 絕對禁止 apt-get install ruby-full
- 注意 ImageMagick 必須依照指示用手動 compile 的。而非用 apt-get install imagemaigck。
- 注意 請每一步都照 recipes 上的指示安裝。不要異想天開跳過,否則後果自負..

接著

* 使用 capistrano deploy 專案。
- 在 production 機器上開設 deploy 用帳號 apps,把自己的 public key 丟上 apps 這個帳號的 ~/.ssh/authorized_keys 裡。
- 在 development 環境下對 project 下 capify .
- 編寫 config/deploy.rb 檔,這是 example: http://gist.github.com/522282
- cap deploy:setup, 然後上機器去設 shared/ 下的 config。(請注意,不要把 database.yml 等等具密碼的 config 也 commit 進專案,應設 .gitignore 迴避掉)。production 需要的 database.yml 請從 shared/ 下 ln 過去。

===

- 常見 Q & A

Q: 為什麼不使用 FreeBSD / Linux 其他 distribution?而且看起來這套作法,與原先的 package system 脫節?
A: 有很多原因。舉一些例好了:

(1) [ gem 版本的問題 ]
FreeBSD 上提供的 ruby 與 rubygem 版本也許足夠純 ruby 開發使用。但對於 rails production 遠遠不夠,這是因為 rails 需要的一些關鍵工具,版本速度很快,而且往往需要相當新穎的 rubygem 版本才能夠使用。( 如 Bundler 需要 gem 1.3.7+ 等等…)。但通常一些人使用 FreeBSD 的使用習慣通常是非用 ports 不可…

(2) [ 特定 gem 的地雷問題]
再來是,比如說中雷機率蠻高的 Rmagick 這個 gem,地雷很多。通常是用 OS package management system 裝的 ImageMagick,再來裝 Rmagick,大概裝十次,有九次是完全不能跑的 !!!!! 而且,使用 apt/yum 安裝的 ruby-XXXX,通常是綁死原先的 apt/yum 的 dependency,越到後面這些相依性就會越來越混亂,混亂到無法收拾

(3) [特定 gem 版本綁死特定套件的版本]
比如說 xapian 這個 search engine,gem 版本號與 package 版本是一對一,互不相容啊 \_/。這時候用 pacakge system 就會 /_\

[[ 不過就算我在這裡廢話這麼多,你也不會聽,等你中大獎才會覺得我中肯。習慣了...]]

所以實務上會建議,ruby 與 gem 完全與 package management system 脫節,至於特殊的套件安裝,用 chef 去控管。37signals 幾個月前也釋出了他們的 chef 的 cookbook。

Q: 不過,這樣聽起來在最糟糕的情況下還是可能產生一股「無法用系統」管理的混亂?那怎麼辦…

A: 37signals 2007 年之後的作法,改採 deploy VM 的方式去做。與傳統佈署的方式想法不同,買來一台大機器,並不是一台灌一個 OS,而是一台切 8 個 VM,做 8 個一模一樣的環境。這樣雖然效能上會「有一點犧牲」,但是可以大幅減少「人工」(更新套件系統,處理 dependency 上的 effort)。畢竟「機器的價格」相較起「人的薪水」便宜太多了。

Q: 為何要使用 capistrano?
A: 因為馬有失蹄,人有錯手啊。孩子…而且打個 cap deploy:rollback 就可以繼續回去睡,明天上班再修,那多好 …

Q: 為什麼要使用 ruby enterprise edition 和 mod_rails 啊?
A: 這次認真一點回答吧。ruby enterprise edition 吃的 ram 比較少,效率上也好一些。至於 mod_rails 是因為管理方便。again,機器比較便宜,人比較貴….

Q: 為什麼要使用這個 recipes 啊?
A: 這是整個社群踩完雷之後累積的最佳實踐啊(淚)

Q: 用 capistrano / chef / bundler 有這麼重要嗎?
A: 有。它可以幫助你將傳統上沒有辦法進版本控制系統的「專案外部環境」,簡化到檔案等級,那麼就可以繼續用版本控制系統管理了。

Q: 把所有東西進版本控制有這麼重要嗎,我不覺得耶?
A: 那是因為你還沒長大 -_-|||… 長大你就懂了。


This work is licensed under a Creative Commons Attribution-Share Alike 2.5 Taiwan License. [本文採 cc-by-sa 授權,白話意思就是可以直接轉走,但是要附出處與作者)]

7 Responses to “Best practices of building Rails production enviorments ( on Debian / Ubuntu)”
  1. 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: 來的太是時候(感淚 RT: @xdite: Best practices of building Rails production enviorments ( on Debian / Ubuntu) http://blog.xdite.net/?p=1807 [...]

  2. 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

  3. on 13 Aug 2010 at 9:30 pm 3.xdite said …

    現在已經是 1.3.8 了 XD

  4. 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?_?

  5. 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.

  6. on 13 Aug 2010 at 11:17 pm 6.xdite said …

    sorry, 我搞錯了。這個 case 應該是講一個 1.3.6 一個 1.3.7。不過 ports 版本的 rubygem 版本跟不上(有一陣子 ports 的 rubygem 版本真的很落後)實在很困擾。

    因為比如 rack, bundler 都會有限 rubygem 版本。所以比較好的處理方式就是把整套 ruby 都拔出來做…

  7. 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 當企業公槽
  • Google...意圖使人不當選 !? XD
  • Catan Histories: Settlers of America 中文規則
  • Catan Histories: Settlers of America
  • Google Devfest Taipei ...確認...取消!!
  • Amazon EC2 推出 micro instance

Current Jobs

VeryXD : Founder HTC : Developer


Blog.XDite.net © 2010 | Shaded Grey made free by Flowerpot.com | Powered By WordPress

hemidemi_4a241ef15e6aff952f172acd9ee4050687a4ee26

capistrano相关推荐

  1. capistrano部署ruby on rails应用

    http://www.robinlu.com/blog/archives/117 http://www.robinlu.com/blog/archives/198/comment-page-1 htt ...

  2. 使用Capistrano向EC2部署Django代码--关于SSH相关的配置

    使用Capistrano向EC2部署Django代码--关于SSH相关的配置 - foxracle - 博客园 使用Capistrano向EC2部署Django代码--关于SSH相关的配置 在使用Ca ...

  3. Rails non browser app高级篇-capistrano/daemon部署

    上次谈了如何开发rails的non browser app,本文将谈谈如何部署这类APP的问题 用于生产环境时,必须要考虑到如何将其部署和运行,最好的办法是让这个app作为daemon运行,并且可以通 ...

  4. 自动化代码部署、代码回滚、命令执行软件之capistrano

    Hi,本周第一天没什么事,所以就先分享一下我研究自动化代码部署与回滚软件的经验.这个软件有什么用途?主要是解决自动进行代码的部署,避免手动部署时出现错误,节省时间,同时在出现问题的时候,能回滚到之前的 ...

  5. php capistrano,使用Capistrano 做自动化部署(适合所有语言所有框架)视频课程

    在程序员的世界, 我们要追求优秀, 效率,准确.时间就是生命! 可惜的人是,人肉根本不行. 效率低, 速度慢, 特别容易出错. 你的Java程序,是不是在Eclipse中打包成war, 然后 ftp上 ...

  6. 使用Nginx+Unicorn+Capistrano+Sinatra搭建Ruby Web应用

    记录一下使用如下工具搭建一个简单的Ruby Web应用的过程: 工具集: Nginx - 前端服务器 Unicorn - 应用容器 Capistrano - 自动部署工具 Sinatra - 极轻量级 ...

  7. Rails 的自动化部署工具Cap(Capistrano)和mina

    项目的自动化部署工具.cap 整合了与rails 相关的自动化部署命令 项目经过多次部署后,服务器会生成一个这样项目的目录 current 是指当前版本, link 到 release 下的指定版本目 ...

  8. capistrano 部署后自动清理之前的release

    (1)如何自动清理老的release capistrano 部署后自动清理老 release,默认只保留 5 个 releases 添加下面代码到 config/deploy.rb# if you w ...

  9. Capistrano deploy flow outline

    Official flow reference: 点击打开链接 An example flow: Deploy: starting Rbenv ensures that the version we ...

最新文章

  1. Redux 学习总结 (React)
  2. zcmu1550(字符串最小表示法)
  3. CUDA入门需要知道的东西
  4. AMIO编辑器开发(三):转向C++,月底遇到第二个瓶颈
  5. jQuery LigerUI 使用教程入门篇
  6. 企业级应用与互联网应用的区别?
  7. 转-squid介绍及其简单配置
  8. PHP获取一篇文章内容中的全部图片,并下载
  9. latex中的对与错(对号与叉号)
  10. 广搜算法之翻转棋子游戏
  11. 用户故事 | 李兆龙:博观而约取,厚积而薄发
  12. 我的世界服务器怎么制作头颅,我的世界怎么刷生物头颅 生物头颅制作方法
  13. Python OpenCV _1基本操作(画图,循环播放图像,鼠标事件,读取中文路径中的图片)
  14. EFS加密解密----重装系统后
  15. VS Code 常用必备插件
  16. 网卡地址能查计算机位置吗,如何通过网卡地址查找到丢失的电脑
  17. 【云原生 • Docker】Docker常用命令总结(值得收藏)
  18. jQuery取值和赋值的基本方法
  19. 暴雪游戏 ‘最后的亡语’ ,真就无法卸载吗?
  20. deepnode软件下载地址_Flash cs6软件下载地址及安装教程

热门文章

  1. Linux tomcat日志分割按天分割
  2. Why Did the Cow Cross the Road III(树状数组)
  3. Hadoop供应商MapR:先上市, “不久之后”就会盈利
  4. 数据流通与交易国家实验室成立 由上海牵头组建瞄准行业重大需求
  5. android MAT使用
  6. CoffeeScript和Sass提高Web开发效率
  7. Hibernate 之父:是时候升级到 Java EE 6 了!
  8. 织梦后台上传文章的php文件是那个,如何在织梦文章中上传视频及调用视频
  9. HTML5基础-Mark标签高亮显示文本
  10. smarty模板引擎_7-自定义函数