2KB项目,专业的源码交易网站 帮助 收藏 每日签到

使用 Capistrano —— Rails应用快速部署工具

  • 时间:2019-01-23 18:42 编辑:2KB 来源:2KB.COM 阅读:324
  • 扫一扫,手机访问
  • 分享
摘要:
Capistrano 英文原文:Using Capistrano

"我鼓励你成为一个拥有三种美德的程序员:懒散,急躁还有傲慢。" -- Larry Wall, Perl语言之父。

对于大部分的程序员来说,部署应用是可以偷懒的。部署到一个集群--或者甚至在一台机器上--工作会十分重复和累人。使用Capistrano,一个ruby部署工具,可以让我们部署到远程服务器的工作变得简单,只需运行已定义好的任务即可。

Ruby程序员的工具箱包含很多可以减轻它们工作的工具,可以说ruby程序员是最懒惰的。就算替你完成这些烦人的工作还不够,ruby程序员甚至图谋使用一种语言(ruby)来构建他们的工具。不是使用bash,make,PHP, Perl来集成开发,而是只用ruby。

Capistrano致力于在任何的机器上运行远程命令。如果你需要连接到6台服务器上,并发布更新包,或者当你发现某些地方不对,而需要做回滚操作,却没有快速的方法去实现,那么你就需要想想如何偷懒了。

Capistrano以recipes来对任务分组,并且默认recipe,对于需要运行迁移和重启Rails服务器的时候,是显得十分的有用,这个我们在稍后会探讨它的。但是,Capistrano的核心并非是针对Rails的。你可以针对你的recipe,构建任务,并调整Rails的recipe去适应任何的语言或者框架。

让我们探讨Capistrano是如何实现Rails的部署,还有如何构建我们的任务,如何使用一条命令实现把你的应用推送到20台服务器上。

Capistrano和Rails

就像Rails,Capistrano越来越多的被用于部署到各种版本的Linux,并且在Leopard中已被默认安装,你就不需要再独立安装它。如果你需要安装它,就如其他的Ruby gem包一样,使用如下命令:

sudo gem install -y capistrano
Capistrano有两个主要命令:cap,这个命令被用于查看和运行任务; capify,用于在Capistrano中建立Rails项目。假设你已经有一个项目,复制它,并在项目跟目录中运行capify命令:


cd path/to/project capify .
这个命令会创建两个文件:Capfile和config/deploy.rb。Capfile是Capistrano里面相当于Makefile,用于make和Rakefile到Rake。Capistrano期望有一个Capfile,同时里面并包含任务或者包含一个Ruby文件。

在这个例子中,Capfile只包含config/deploy.rb,之后你会发现这个是十分有趣的事情。deploy文件里面包含一些你在运行cap命令前,需要注意的设置,

set :application, "set your application name here"
set :repository,  "set your repository location here"
如果你不熟悉ruby语法,你会发现这看起来十分像配置文件。但是,因为在ruby中调用函数的时候,不需要使用括号,文件里面的每一行其实就是调用set()函数:


set(:application, "your-app-name")
使用你的应用的名字替代:application变量,不要包含空格--这会创建一个部署目录。 使用你的版本管理URL目录替代:repository(在这个例子中,我们使用SVN)

如果你的SVN需要用户名和密码,请按如下配置:

set :scm_username, "svn-username" 
set :scm_password, "svn-password" 
接着,取消注释并配置部署目录。如果你的部署服务器上没有部署的目录,Capistrano会帮你创建它:


set :deploy_to, "/path/to/doc/root/www/#{application}"
这里,我们使用我们之前设置的目标部署目录的application变量。这写全部是ruby的标准语法,在所有的Capistrano脚本中适用,这样可以使我们的工作更有效,而不是混杂各种令人头晕的语法在里面。

最后,我们需要配置部署的服务器信息。你可以添加很多你需要部署的服务器,你只需遵循SSH可以理解的命名规则:

role :app, "app-server-1", "app-server-2", "app-server-3"
role :web, "192.168.1.123"
role :db,  "db-server-1", :primary => true
如果你只是想测试一下Capistrano,你可以把你的工作站配置到部署地址; 这样,你就无需考虑服务器之间的跳转:


role :app, "me@my-local-ip"
现在,我们可以告诉Capistrano为我们建立部署路径的配置:


cap deploy:setup
当你运行这个命令,Capistrano开始为你展示它所做的。这样一来,可以方便我们调试Capfile,并可以消除你的疑虑知道它在做什么动作。每当你连接到一台服务器,系统会需要你提供密码,然后Capistrano就会运行一连串的命令。

执行完deploy:setup命令后,部署路径就会创建了一些新增的目录,运行cap命令去推送新版本,执行回滚和其他动作:

myapp/
      releases/ shared/log shared/pids shared/system
接着,我们开始部署应用。Capistrano会自动检查源代码并发布,同时创建一个叫做current的symlink链接:


cap deploy:cold
执行完这个命令后,让我们来看看发布目录:


# current@ -> /www/captest/myapp/releases/20080614144520
这个一个"cold"发布,意思是表示只执行一次的任务。之后如果我们需要再发布应用,你只需使用部署任务:


cap deploy

当你执行完deploy:cold或者deploy命令后,查看一下部署目录,你会发现你的源代码会按照Capistrano的方式被发布出去。

部署任务替代了登录服务器,获取源代码,设置数据库和重启服务器。任务只需运行很短时间,我们能就现在可以享受懒惰的感觉了!

深入知识

我们只需运用deploy:setup , deploy:cold, deploy命令就可以发布应用。recipe里面其实包含了很多东西,让我们来看看所有可用的任务:

cap -Tv

和rake -T很相像,这个命令会列出所有的任务和任务相关的文档。如果你已经运行过几次deploy,我们就可以尝试一下rollback或者rollback_code任务。

每次你执行回滚的时候,Capistrano会把symlink指向前一次发布的目录。回滚操作可以重复执行,直到你找到了你想要的稳定版本:

cap deploy:rollback_code

属于你自己的任务

当你使用Capistrano应用到你的rails项目中,你就会发现他是如何让你变得更懒惰。使用Rails特有命令的任务同样可以包含任何的命令在里面。

当你运行Capistrano任务,例如deploy,你会很多SSH命令和回应会回显出来。如果你需要发布到几台服务器上,你看到来自多台服务器的回应,因为Capistrano可以在多台服务器上运行任务,只要你需要发布到多少台服务器都可以。

它的用处是非常广的——检查硬盘空间,从集群中复制实时数据和运行维护计划——那么我们应该如何构建我们自己的任务呢?

Capistrano的任务是通过如下的语法来定义的:

desc "Short description here..."
task :name_of_function, :roles => :servers do
        # tasks is in here...
end
Ruby的优雅语法让所有事情都变得十分简单,那么让我们来单独讨论它。第一行是一些解释说明,这些说明会在你运行命令时被输出(同样在你的项目的跟目录下):


cap -Tv
Ruby支持在调用函数的时候,不使用括号,所以第二行实际上是调用了Capistrano的任务函数. 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部