现在的位置: 首页 > 综合 > 正文

capistrano 部署rails

2018年01月10日 ⁄ 综合 ⁄ 共 2994字 ⁄ 字号 评论关闭

    转自石锅拌饭察看原文

    部署网络应用服务是很麻烦的事情,安装程序,升级数据库schema,切换版本,重启服务。步骤越多,人工参与越多,越容易出问题。
    Capistrano是ruby on rails提供的部署方案,原名叫SwitchTower,多好记的名字,结果和人重了,换成现在这个,估计是为了赌气才起成这样,反正我再也不能拼对 了。它集成了很多部署程序必须的步骤,借助ssh、版本管理系统(支持svn、cvs等等好几种)和rails的migration,只要做好配置,就可
    以在很大程度上实现部署自动化。
    Capistrano的相关文档可以看这里。最简单的使用方法是:

    1. 安装

      gem install capistrano

    2. 加入capistrano支持

      cap --apply-to /path/to/my/app MyApplicationName

    3. 修改配置文件

      修改config/deploy.rb文件。

    4. 初始化服务器上的运行环境

      rake remote:exec ACTION=setup
      这一步会连上你的服务器,创建一些目录。

    5. 部署

      rake deploy
      连接服务器,完成部署。

    说起来好像挺简单,麻烦的地方主要在于修改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。

    还有一些其它的命令,具体可以查看gem capistrano安装目录下lib/recipes中的standard.rb。另外,可以自己在deploy.rb中定义新的命令。
    目前的capistrano(版本1.1.0)还有一些局限,比如你所有服务器都必须使用同样的账号,这个让我在dreamhost上部署碰到了一点麻烦。总的来说还是比较方便的。

     

    石锅拌饭写了一篇BLOG:尝试用capistrano部署ruby on rails应用,但新手在实际应用时还是会有不少麻烦,尤其是国内很多人都是在Windows平台上开发Rails Application, capistrano 是不可以从 Windows 平台上 rake deploy 到 Linux 上的。

    这里我分享一下在 Windows 平台上开发,然后 cap 发布到 dailybuild 服务器(SVN是建立在内部网的,capistrano 完成 dailybuild), 然后再使用 linux 的 rsync 命令将 dailybuild 服务器上测试完成的应用发布到 Internet 上的过程。

    完成这个演示至少需要三台计算机:

    A (Windows) :一台Winsows开发计算机

    B (Linux):一台SVN服务器,一台dailybuild服务器 (SVN和dailybuild在同一台计算机)

    C (Linux):一台Internet上的服务器

    一、安装 capistrano

    在A和B上都需要安装 capistrano ,安装 gem 很简单:

    gem install capistrano

    二、应用 capistrano

    1.  在开发计算机上应用 capistrano :

      • cap –apply-to x:/path/to/my/app MyApplicationName
    2. 修改 config/deploy.rb 文件

    set :application, “app”
    set :repository, http://192.168.0.9/svn/repo1/#{application}

     

    role :web, “localhost”
    role :app, “localhost”

     

    set :deploy_to, “/u/apps/#{application}”
    set :user, “user” 
    set :password, “password”

    #如果在dailybuild服务器上使用的数据库的environment不一样,则可以在deploy.rb文件末尾加上以下语句:

    desc “link in production database&environment credentials”
    task :after_update_code do
    run <<-CMD
    rm #{release_path}/config/environment.rb && 
    ln -nfs #{deploy_to}/#{shared_dir}/config/environment.rb #{release_path}/config/environment.rb ; 
    rm #{release_path}/config/database.yml && 
    ln -nfs #{deploy_to}/#{shared_dir}/config/database.yml #{release_path}/config/database.yml 
    CMD
    end

    三、从A计算机上将RoR App提交到SVN服务器上

    四、在计算机B上得到SVN上的App(该动作只需进行一次,以后使用rake deploy时capistrano是直接从SVN获取最新代码的)

    /root# svn co http://192.168.0.9/svn/repo1/app –username yourusername –password yourpassword

    五、初始化服务

    /root# cd app

    /root/app# rake remote:exec ACTION=setup

    六、部署

    /root/app# rake deploy

    七、要实现 dailybuild , 可以将第步骤六写一个sh脚本,并将脚本加入linux cron中,设置为每天早上00:00执行即可

    八、由于SVN是安装在内部网上的,运行在Internet上的服务器不能访问,可以不可以直接使用 capistrano 将内部的更新deploy到外部,可以使用 linux rsync 将 dailybuild 上的最新代码同步到外部

    # rsync -zrtopg –delete /u/apps/app/ root@xxx.xxx.xxx.xxx:/u/apps/app

    注意:本篇文章重在介绍发布的过程步骤,这其中涉及到的细节知识点还需要查看相关帮助文档,如SVN的使用,怎样设置linux的计划任务,以及rsync命令的详细使用方法等。

    抱歉!评论已关闭.