使用Capistrano部署rails

使用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, "[email protected]: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)