<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d4684235500622716427\x26blogName\x3dCaiwangqin\x27s+blog\x26publishMode\x3dPUBLISH_MODE_HOSTED\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttp://blog.caiwangqin.com/search\x26blogLocale\x3dzh_CN\x26v\x3d2\x26homepageUrl\x3dhttp://blog.caiwangqin.com/\x26vt\x3d3393395200455623441', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script>

Caiwangqin's blog

Focus on Cloud Service, Smart Hardware, Architecture, Technic and beyond…

Windows平台上使用 capistrano 部署 ruby on rails 应用

2006年10月11日星期三

石锅拌饭写了一篇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命令的详细使用方法等。


标签:

posted by Jesse Cai, 上午7:46

0 Comments:

发表评论

订阅 帖子评论 [Atom]

<< 主页