使用Capistrano部署rails
gem
gem 'capistrano'
# Capistrano RVM integration
gem 'rvm-capistrano'
本地服务器
rails服务器
svn服务器
通过本地脚本部署应用到rails服务器
1)本地安装capistrano
gem install capistrano
2)检查安装是否有效
cap -V #列出版本
3)开始工作
进入本地 rails工程根目录执行
capify .
这个命令会生成两个文件,一个是Capfile文件(启动脚本),在应用的根目录下,另一个是deploy.rb文件(配置文件),在应用的config目录下
可以用cap -T 查看所有task, cap -e deploy 解释deploy任务的详情 。
4)修改config/deploy.rb文件
配置参数:
application:应用名。
repository:版本管理系统的链接URL。
web:web服务器名列表。
app:应用服务器列表。
db:数据库服务器列表。
user:ssh用户名。
deploy_to:应用部署路径。
如果你的svn链接需要用户名和密码,可以通过svn_username和svn_password配置。
除了setup和deploy,缺省支持的命令主要有:
disable_web:生成maintenance.html,你的系统需要能够自检测这个文件。
enable_web:删除maintenance.html。
update_code:和版本管理器做代码同步。
rollback_code:如果部署完发现有问题,可以用这个命令换回上一个。
restart:重启,其实就是调用了reaper。
migrate:在服务器端运行rake RAILS_ENV=#{rails_env} migrate。
deploy:其实就是update_code+symlink+restart。
deploy_with_migrations:update_code+migrate+symlink+restart。
rollback: rollback_code + restart。
===================================================
示例:
set :application, "myapp" #项目名称
set :repository, "git@git.githup.com:myapp.git" ##仓库地址
set :scm, "git" ##git clone
set :scm_verbose, true
set :branch, "master"
set :deploy_to, "/var/www/#{application}" ## 发布机器的路径
set :user, "sunyw" ##以**用户发布
set :use_sudo, false ## 不使用sudo
set :domain, '192.168.1.115'
##如果你的svn链接需要用户名和密码,可以通过svn_username和svn_password配置
role :app, domain ##app 应用服务器的IP
role :web, domain ##web web服务机器IP
role :db, domain, :primary => true ##DB数据库机器IP
# if you want to clean up old releases on each deploy uncomment this:
# after "deploy:restart", "deploy:cleanup"
# 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
namespace :bundler do
desc "Install for production"
task :install, :roles => :app do
run "cd #{deploy_to} && bundle install"
end
end
after 'deploy:update_code', 'bundler:install'
===============================================
# RVM bootstrap
$:.unshift(File.expand_path("~/.rvm/lib"))
require 'rvm/capistrano'
set :rvm_ruby_string, 'ruby-1.9.2-p290@rails313'#这个值是你要用rvm的gemset。名字要和系统里有的要一样。
set :rvm_type, :user # Don't use system-wide RVM
#这个不能少,否则部署不了。
#下面的部署信息,应该都很清楚吧。
#some parameter setting
set :host,server_name#set your server name
set :port_number, server_port#set your server port
set :rails_env, rails_env
# main details
set :application, application_name
role :app, "#{host}"
role :web, "#{host}"
role :db, "#{host}", :primary => true
# server details
# default_run_options[:pty] = true
set :use_sudo, false
set :user, user_name
if user_pw.nil?
ssh_options[:keys] = %w(./lib/dsa_ssh_key)
else
set :password, user_pw
end
set :deploy_to, "#{deploy}/#{application}"#set your application path
# repo details use svn to manage code
set :repository, svn_repo
set :scm, :subversion
set :deploy_via, :export
set :scm_username, 'username'
set :scm_password, 'password'
set :runner, nil
# runtime dependencies
depend :remote, :command, "monit"
depend :local, :command, "svn"
depend :remote, :gem, "bundler"
# tasks
namespace :deploy do
task :start, :roles => :app do
run "touch #{current_path}/tmp/restart.txt"
end
task :stop, :roles => :app do
# Do nothing.
end
desc "Restart Application"
task :restart, :roles => :app do
run "touch #{current_path}/tmp/restart.txt"
end
end
namespace :bundler do
desc "Install for production"
task :install, :roles => :app do
run "cd #{release_path} && bundle install"
end
end
after 'deploy:update_code', 'bundler:install'
开始部署
cap deploy:setup
初始化一些目录,在production服务器上。
cap deploy
可能出现的问题,根据提示安装就可以了。
数据迁移
cap deploy:migrate

本文介绍如何使用Capistrano工具进行Rails应用的部署过程,包括安装Capistrano、配置部署参数、设置RVM集成及具体的部署步骤。还提供了详细的配置文件示例,帮助读者快速上手。


被折叠的 条评论
为什么被折叠?



