https://baike.baidu.com/item/Capistrano/6844928?fr=aladdin
 
Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署web应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。
 
外文名
Capistrano
开发语言
Ruby
稳定版
2.6.0 / 4 May. 2011
原始作者
Jamis Buck

基本信息

编辑

Capistrano最初由Jamis Buck用Ruby开发,并用RubyGems部署渠道部署。现在Capistrano不仅限于应用Ruby on Rails的 web应用框架,而且可以用于部署用其他框架的web应用程序,比如用PHP开发的。Capistran最初是用来应用于bash指令行。现在Ruby on Rails框架的用于也可以使用它的新特性,例如,对当前web应用部署改变使其更新版本,或者使其回滚到之前的旧版本。
Capistran最初叫SwitchTower,由于商标争端于2009年二月24日改为Capistran。而且原始作者于当天宣布不再是该软件的维护者。
应用平台 POSIX (Linux, OpenBSD, Mac OS X)
类型 Deployment Tool
License MIT
Capistrano是一种通过ssh向多个服务器部署web应用的一种框架和工具。它使用一种简单的Domain Specific Language,这种语言是从工具rake中部分借用过来的,Rake的作用类似C语言中的make工具,允许你定义任务,这些任务也许用于某些特定角色的服务器。同时它还允许你透过网关在防火墙和VPN之后执行任务。
当您完成了Rails 2.x应用后,是时候用到Capistrano了,它可以很容易的帮您自动向多台服务器同步部署应用。Capistrano的安装也很简单,只需要gem install capistrano即可。在我们有效地设置Capistrano之前,我们必须做好应用部署相关的决定,Capistrano可不能帮你解决这些问题。但是Capistrano的默认设置足以解决大部分问题。
首先我们需要安装web服务器软件,可以选择的有Apache, Lighttpd, 和 nginx 如果没有特别需求,可以选择nginx,小巧而高效。
数据库
然后是数据库,你需要决定你的产品需要那款数据库软件,MySQL 和 PostgreSQL是两个不错的开源选择,即使大公司更倾向使用Oracle。有些人会选择使用SQLite,他很适合单用户的嵌入式环境,但却不适合web环境。在这些选择中,MySQL通常来说是最容易安装和设置的,所以此处推荐MySQL。
然后是Ruby,Ruby对任何Rails应用来说都非常关键,你需要决定你要安装Ruby的版本和插件。这些年JRuby也能跑Rails,但是如果你决定用JRuby来代替MRI Ruby来部署的话,你的设置环节可能需要较大的改变。
应用层是实际运行你的web应用的环节。Mongrel是个很流行的选择,而Thin and Passenger (例如 mod_rails)也变得越来越流行。有的人会尝试使用WEBrick来部署产品,但并不推荐使用它,WEBrick用于应用的开发和测试还是不错的,但要用于大规模部署产品的生产环境可能就不太好。还需要注意的是,如果你使用Passenger之类的话,你需要确保你的web服务器软件支持他,Passenger只支持Apache2和nginx
虽然版本控制系统跟产品部署的设置没什么关系,但是在默认设置下,Capistrano很大程度上依赖你的版本控制系统。Capistrano支持的版本控制系统比较少,要支持更多的版本控制系统,你需要做更多地工作。最常见的SubversionGit都能得到很好的支持,最易选一个你用的惯的它也支持的版本控制系统。
接下来我们按照如顺序配置
nginx
MySQL
MRI Ruby
Mongrel
Subversion
Capification
安装完Capistrano之后要做的第一件事就是"capify"你的应用,这个过程是设置Capistrano来部署你的应用,很简单,只需在你的应用的root目录里执行capify .(即capify+" "+ ".")。这将产生两个文件,一个是capfile,这个是Capistrano需要的主要文件,就像make自动产生makefile,rake自动产生Rakefile一样,Capistrano默认寻找并加载capfile文件,默认产生的rapfile非常小,它所做的事就是加载“config/deploy.rb";第二个文件是"config/deploy.rb",这个文件包含你的应用程序部署所需的设置。Ralis的所有设置文档都放在config目录下,通常,你不需要管capfile文件,只需要把精力放在config/deploy.rb的设置和优化上。如果你的Capistrano用于非Rails环境,你可能只有一个capfile文件,而没有config/deploy.rb这个文件。
Configuration
设置,如果你看看config/deploy.rb的内容,你就会发现,里面没多少可设置的东西。首先我们要告诉Capistrano我们的应用程序被"调用"了
set:application, "your_application_name"
然后我们需要告诉Capistrano我们的源代码在哪里,这个地址你的本地主机和服务器都可以到达。
set :repository, "svn+ssh://code#######/repos/your_application_name"
然后,如果你用的不是Subversion,你还需要告诉Capistrano你使用的版本控制系统:
set :scm, :git
部署目录结构
一次成功的部署将会产生如下文件目录结构:
[deploy_to]
[deploy_to]/releases
[deploy_to]/releases/20080819001122
[deploy_to]/releases/...
[deploy_to]/shared
[deploy_to]/shared/log
[deploy_to]/shared/pids
[deploy_to]/shared/system
[deploy_to]/current -> [deploy_to]/releases/20100819001122
(deploy_to代表你想让Capistrano在你的服务器部署的位置)
每部署一次,将在release目录下产生新的目录,然后新版本将在部署在那里。然后"current"链接将指向新产生的目录.
还需要注意的是,设置你的web服务器软件时要在相应的root目录下执行。
回到设置上来
接下来回到设置Capistran上来。我们需要告诉Capistran我们的应用放在服务器的哪里。默认是在"/u/apps/#{application}"。但是你也许想在/var/www上部署,这就需要这样设置:
set :deploy_to, "/var/www"
然后在告诉Capistrano我们的服务器在哪儿,各自都起到什么作用:
role :app, "tutorial#com"
role :web, "tutorial#com"

其他信息

编辑

role :db, "tutorial#com", :primary => true
如果只有一个服务器,就这样设置:
server "tutorial#com", :app, :web, :db, :primary => true
app,web,db是Capistrano需要的三种角色:
web:你的服务器软件运行的地方;
app:你的应用层运行的地方;
db:迁移运行的地方;
杂项配置
以上的设置对大部分人来说已经足够了,下面是额外的附加设置,如果你确实需要的话:
set :user, “foo”如果你你登录的用户名与你登录本地的用户名不一致,你需要告诉Capistrano你的用户名;
set :scm_username, “foo”如果你登录你的源代码库时使用的用户名与你登录本地的用户名不一致时,你需要告诉Capistrano。注意到并不是所有的版本控制系统都支持scm_username变量,你可能需要在你的库中嵌入scm_usernam:e.g. “svn+ssh://#{scm_username}@foo.bar#com/path/to/repo”
set :use_sudo, false,在默认情况下,Capistrano会尝试使用sudo即管理员权限执行命令,在你不具备sudo权限的时候,这可能会是个问题,需要引起足够注意。
与Capistrano会话
设置完成之后,我们可以”问问“Capistrano一些问题,看看基本信息:
$ cap -h 显示Capistrano自身相关信息;
$ cap -H 显示更多信息;
$ cap -T 显示tasks
设置服务器
开始正常工作之前,我们需要让Capistrano建立基本的目录树:
$ cap deploy:setup
检查依赖性:
$ cap deploy:check我们在相应的位置新建了相应的目录结构,然后我们需要让Capistrano所需的依赖关系是否都得到满足
数据库初始化
接下来是要确定数据库已经准备好了,安装设置完之后,还需要确认一下三件事:
1)你是否已经为你的部署新建了数据库?
2)你是否已经为你的config/database.yml文件添加了相应的部分?
3)你是否为你的数据库设置了足够的权限?
Capistrano启动应用层之前,他首先会执行script目录下的spin脚本,脚本内容如下:
#!/bin/sh
#{deploy_to}/current/script/process/spawner \
--environment=production \
--instances=1 \
--address=127.0.0.1 \
--port=#{port}
把#{deploy_to}对换成相应的完整路径
#{port}是你想让mongrel监听的端口
接下来就该部署了
$ cap deploy:update
这个指令将把你的源代码复制到你的服务器上,然后把current这个链接更新到最新的目录下。但是这会儿还没正式启动应用层。这一步成功之后,就会登录到你的服务器,然后把当前目录定位到你的新版本里,即[deploy_to]/current,首先上载数据库架构到数据库里:
$ rake RAILS_ENV=production db:schema:load
如果这一步成功完成,可以用下面的指令来测试下:
$ script/console production
如果测试成功,会产生如下命令提示符
>> app.get("/")
最后,启动应用层,看看动态内容是否被成功加载:
$ cap deploy:start
这将会冷启动应用层,这个过程中使用了上述spin脚本
重启和重新部署
$ cap deploy:restart
然后正式部署:
$ cap deploy

Capistrano:自动完成多台服务器上新版本的同步更新,包括数据库的改变的更多相关文章

  1. SqlServer数据库同时备份到两台服务器上(并自动删除过期文件)

    数据库同时备份到两台服务器上(并自动删除过期文件) 举例 :(本地)服务器A: IP :192.168.1.1 (远程)服务器B: IP :192.168.1.2 数据库版本:SqlServer200 ...

  2. Twitter如何在数千台服务器上快速部署代码?

    答案是:用BT,也就是你我应该都很熟悉的BitTorrent. 对于网站经营者.创业者来说,扩展性的问题是在网站流量成长过程中势必会面对的问题,如何建立一个具有扩展性的架构(scalable arch ...

  3. 在多台服务器上简单实现Redis的数据主从复制(3)(转载)

    转载地址:http://www.cnblogs.com/liping13599168/archive/2011/04/14/2016226.html Redis的主从复制功能非常强大,一个master ...

  4. 在多台服务器上简单实现Redis的数据主从复制

          Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面我演示下怎样在多台服务器上 ...

  5. 如何在一台服务器上安装两个mysql或者更多

    如何在一台服务器上安装两个mysql 1       前言 上篇写了在一台机器上源码编译安装一个mysql,那么如何在一台机器上源码编译安装两个mysql或者更多呢? 2       环境 mysql ...

  6. 在同一台服务器上配置多个Tomcat

    如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我 ...

  7. 如何在同一台服务器上安装多套通达OA

    本人最近研究了在同一服务器安装多套通达OA的方法:发现网上关于这个话题的文章比较少,于是录制成视频,在此发布,希望对有这方面需求的朋友有所帮助: http://blog.163.com/zhuwei_ ...

  8. Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络

    1: 安装windows server 2008 R2 中文版 (过程略) 安装完成后设置机器名和IP地址, 本过程机器名 crm5dev,192.168.0.110 dns: 192.168.0.1 ...

  9. 一台服务器上同时启动多个 Tomcat

    在同一台服务器上启动多个 Tomcat 服务,需要修改 conf/server.xml文件里的三个部分,如下: 1.修改Http访问端口(默认为8080端口) <Connector port=& ...

随机推荐

  1. Oracle操作XML各种场景介绍

    版权声明:凭栏处.潇潇雨歇. https://blog.csdn.net/IndexMan/article/details/28130961 近期在研究Oracle PLSQL中对于XML的系列操作. ...

  2. var与let循环中经典问题

    循环1: 下面代码运行结果是输出10   <script> var a =[]; for(var i = 0;i<10;i++){ a[i] = function(){ consol ...

  3. Directx11教程(44) alpha blend(1)

    原文:Directx11教程(44) alpha blend(1)    我们知道,D3D11中按Frame来渲染物体,每个Frame中又可能包含若干个primitive,如下面的示意图所示:     ...

  4. 阿里云的重大战略调整,“被集成”成核心,发布SaaS加速器助力企业成长

    摘要: 阿里云战略调整,“被集成”成为生态战略,讲讲即将“退居幕后”的阿里云. 阿里云近期调整动作巨大,阿里云新任总裁张剑锋(花名,行颠)上任后充分体现其创新和自我探索不断求“变”的阿里特性.期间,达 ...

  5. 【JZOJ4889】【NOIP2016提高A组集训第14场11.12】最长公共回文子序列

    题目描述 YJC最近在学习字符串的有关知识.今天,他遇到了这么一个概念:最长公共回文子序列.一个序列S,如果S是回文的且分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...

  6. python GBK

  7. Libevent:11使用Libevent的DNS上层和底层功能

    Libevent提供了一些API用来进行DNS域名解析,并且提供了实现简单DNS服务器的能力. 本章首先描述域名解析的上层功能,然后介绍底层功能及服务器功能. 注意:Libevent的当前DNS客户端 ...

  8. Git 的两种忽略文件方式 gitignore 和 exclude

    Git 的两种忽略文件方式 gitignore 和 exclude .gitignore 不用说了,大家都知道. 有一个 exclude 可能接触比较少. 知道这个功能后发现,用在服务器上非常方便,因 ...

  9. SDUT-3331_数据结构实验之串三:KMP应用

    数据结构实验之串三:KMP应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 有n个小朋友,每个小朋友手里有一些糖块, ...

  10. Flask学习之三 web表单

    本部分Miguel Grinberg教程的翻译地址:http://www.pythondoc.com/flask-mega-tutorial/webforms.html 开源中国的:http://ww ...