Test Capistrano Rails Auto Deploy at Mac Pro

princy | January 7th, 2012 - 11:51:33

0. 安装Xcode和早期开发环境配置

0.1安装Xcode

  • Xcode默认有Ruby,SVN,SSH,Apache等各种开发相关程序
  • 比较早的版本可以从MacOX的随机盘里面找到Xcode的安装文件,或者可以从下面的苹果的开发中心那里下载Xcode来安装 (http://developer.apple.com/devcenter/mac/index.action)

0.2设定SSH,Apache

SSH和Apache都可以从苹果系统的系统环境设置里面的共享来选择开启SSH服务器和Apache服务器,并可以从那个页面的链接来进行确认,很方便.

1.Ruby和Rails的安装

Ruby和Rails有很多种的安装方式,如果在家自己捣鼓着玩的话个人推荐用rvm来安装,因为在rvm下可以很方便的管理ruby和rails的各种不同的包括不兼容的版本.

1.1 RVM的安装

RVM的安装比较简单,但要首先选择单用户(当前用户)还是多用户(root)的安装.选择当前用户的话可以安装到$HOME下面,主要是你个人利用,系统操作风险比较小.多用户(root)的话会安装到/usr/local/rvm下面,系统的所有用户都可以利用,当然sudo权限下会有些风险.更多信息请参照rvm安装主页(https://rvm.beginrescueend.com/rvm/install/).

个人选择单用户下的稳定版的安装,命令如下.

user$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

rvm命令添加到path里面

user$ echo ‘[[ -s "$HOME/.rvm/scripts/rvm" ]] && . “$HOME/.rvm/scripts/rvm” # Load RVM function’ >> ~/.bash_profile

读取.bash_profile

$ source .bash_profile

安装完毕后的确认

user$ rvm -v
rvm 1.10.0 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]

1.2Ruby的安装

确认可以安装的版本

user$ rvm list known

安装所需要的版本

user$ rvm install ruby-1.9.3

选择安装版本为默认ruby版本

user$ rvm use 1.9.3 –default

确认

user$ruby -v

1.3Rails的安装

rvm下面不同的Rials版本是通过Gemset来管理的,所以安装之前需要建立所需要的gemset,或者不选择而安装到默认的gemset(global)里面.

user$ rvm gemset create rails3.1.0

<查看安装好的Gemsets

user$rvm gemset list

选择此次新安装的Gemset

user$ rvm gemset use rails3.1.0

查看安装好的Gemsets

user$rvm gemset list
gemsets for ruby-1.9.3-p0 (found in /Users/princy/.rvm/gems/ruby-1.9.3-p0)
global
=>; rails3.1.0

安装Rails

user$ gem install rails3

确认版本

user$ rails -v

建立一个Rails项目

user$ rails new depot
user$cd depot
user$rails server

然后可以通过下面的链接来确认程序的启动  (http://0.0.0.0:3000)

2.SVN的利用和配置

苹果系统已经安装好了SVN服务器了,所以可以很方便的利用svnadmin来建立repository.

user$ svnadmin create /Users/user/Sites/svnrepos

确认建立好的svnrepos

http://127.0.0.1/~user/svnrepos/

在svnrepos下面建立新的放前面建立好的rails项目的目录

/Users/user/Sites/svnrepos/rortest/trunk

将前面建好的目录导入到svn里面

user$ svn import -m “New ror import” depot http://127.0.0.1/~user/svnrepos/rortest/trunk

3.用Capistrano来自动release刚才的Rails系统

3.0 Capistrano安装

设定好的gemset下面安装Capistrano

user$gem install capistrano

查看安装的版本

user$ cap –version
Capistrano v2.9.0

3.1 Capistrano的Release系统的设定和配置
建立放置Release系统的文件夹

/Users/user/Source/Ruby/Rails/captest

进入上述目录后导入Capistrano的需要文件

user$capify .

根据提示会发现该目录下面建立了以下文件

Capfile config/deploy.rb

配置自动release的deploy.rb文件

#RVM设置所需内容
$:.unshift(File.expand_path(‘./lib’, ENV['rvm_path']))
require “rvm/capistrano”
#rvm_ruby_string是现在的gemset的名字
set :rvm_ruby_string, ’1.9.3-p0@rails3.1.0′

#防止跳出image,css文件夹找不到错误
set :normalize_asset_timestamps, false

#Release的名字和位置
set :application, “depot”
set :deploy_to, “/Users/user/Source/Ruby/Rails/captest/#{application}”

#设置SVN的内容
set :repository, “http://127.0.0.1/~user/repos/rortest/trunk”
set :use_sudo, false

#提示SSH用户和密码
set :user do Capistrano::CLI.ui.ask(‘SSH User:’)end
set :password do Capistrano::CLI.password_prompt(‘SSH Password’)end

#设定程序源码为SVN
set :scm, :subversion

role :web, “127.0.0.1″ # Your HTTP server, Apache/etc
role :app, “127.0.0.1″ # This may be the same as your `Web` server
role :db, “127.0.0.1″, :primary => true
#role :db, “your slave db-server here”

# if you’re still using the script/reaper helper you will need
# these http://github.com/rails/irs_process_scripts

# If you are using Passenger mod_rails uncomment this:
# namespace :deploy do
# task :start do ; end
# task :stop do ; end
# task :restart, :roles => :app, :except => { :no_release => true } do
# run “#{try_sudo} touch #{File.join(current_path,’tmp’,'restart.txt’)}”
# end
# end

第一次运行Capistrano时候的初始配置(建立Release用各种的文件夹)

user$cap deploy:setup

执行Capistrano命令(Checkout SVN内容,建立本次程序版本的文件夹,Bundle install,链接本次releases到current)

user$cap deploy

向Rails系统里面导入需要的数据

user$cap deploy:migrate

3.2 测试

去刚才的Capistrano目录下面的current文件夹里面启动Rails系统

user$rails s

重新Release一次系统

user$cap deploy

去Capistrano目录下确认Current已经连到了最新额SVN版本里面了