转自石锅拌饭,察看原文
部署网络应用服务是很麻烦的事情,安装程序,升级数据库schema,切换版本,重启服务。步骤越多,人工参与越多,越容易出问题。
Capistrano是ruby on rails提供的部署方案,原名叫SwitchTower,多好记的名字,结果和人重了,换成现在这个,估计是为了赌气才起成这样,反正我再也不能拼对 了。它集成了很多部署程序必须的步骤,借助ssh、版本管理系统(支持svn、cvs等等好几种)和rails的migration,只要做好配置,就可 以在很大程度上实现部署自动化。
Capistrano的相关文档可以看这里。最简单的使用方法是:
-
安装
gem install capistrano
-
加入capistrano支持
cap --apply-to /path/to/my/app MyApplicationName
-
修改配置文件
修改config/deploy.rb文件。
-
初始化服务器上的运行环境
rake remote:exec ACTION=setup
这一步会连上你的服务器,创建一些目录。
-
部署
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
- 在开发计算机上应用 capistrano :
- cap –apply-to x:/path/to/my/app MyApplicationName
- 修改 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命令的详细使用方法等。
相关推荐
capistrano-3-rails-template, 使用 Capistrano 3部署 Rails 应用程序的模板 Capistrano 3 Rails 配置概述这是部署带有的Ruby on Rails 应用程序的示例配置,包括使用Unicorn和Sidekiq后台员工部署的零停机。...
Capistrano是一个强大的自动化部署工具,常用于Ruby on Rails项目的部署。它允许开发者通过简单的命令行接口执行复杂的任务,如代码同步、服务器配置和数据库迁移等。`capistrano-rails-console`是针对Capistrano的...
使用 Capistrano 部署 Rails Capistrano 研讨会的示例应用程序Ubuntu 14.04 - Capistrano - Nginx + 乘客1. 创建 droplet(不要忘记 ssh 密钥) ssh-keygen -t rsa -C " lerolero@gmail.com "pbcopy < ~ /.ssh/...
《再次发一本部署rails的书》是一本专注于Rails应用部署实践的书籍,旨在帮助开发者们理解和掌握将Rails项目上线到生产环境的全过程。Rails是Ruby编程语言的一个热门Web开发框架,以其“约定优于配置”(Convention ...
moonshine, 简单的Rails 部署和配置管理 15分钟部署 Rails 2,3或者应用 MoonshineMoonshine的Rails 部署和配置管理正确完成。通过利用 Capistrano 和 puppet,Moonshine允许你在 15分钟内拥有一个工作应用服务器,...
Capistrano PostgreSQL插件在部署Rails应用程序时抽象并加快了PostgreSQL常见管理任务。 以下是此插件为您的capistrano部署过程所做的特定操作: 在服务器上创建一个新的PostgreSQL数据库和数据库用户 在所有发行...
Capistrano 3兼容任务的集合,使基于Rails和Sinatra的应用程序的部署更加容易。 安装 将此行添加到应用程序的Gemfile中: gem 'capistrano-cookbook', require: false, group: :development 然后执行: $ bundle ...
hapistrano是一款专门为Haskell应用程序设计的部署工具,它的出现是为了提供类似Rails社区中Capistrano的功能。Capistrano在Ruby on Rails开发中扮演着重要角色,它简化了项目的部署流程,使得开发者能够通过命令行...
您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明… 如果您不打算运行rake doc:app请随意使用其他标记语言。
标题 "rails 部署 nginx" 涉及到的是在Web开发中使用...通过以上步骤和配置,开发者可以成功地在Nginx上部署Rails应用,提供高效、稳定的服务。理解这些知识点对于任何想要进行Rails应用部署的人来说都是至关重要的。
在本项目中,Capistrano被用来自动化部署Rails应用到服务器,大大提高了开发团队的效率。 总结来说,这个"rails+grape+swagger+devise+capistrano"的简单融合示例展示了一个完整的、功能齐全的API项目架构。Rails...
:warning: 该项目不再维护... Capistrano非常适合部署Rails应用程序,但是所有前提条件(如Nginx和PostgreSQL)呢? 您的VPS上是否配置了防火墙? 您是否安装了最新的操作系统安全更新? HTTPS工作正常吗? capistran
capistrano-asg的编写旨在简化Rails应用程序到AWS AutoScale组的部署。 capistrano-asg将: 将代码部署到连接到给定AutoScale组的每个正在运行的实例 部署后,从一个正在运行的实例中创建一个AMI 将带有新代码的...
capistrano-nginx-unicorn, 从 Capistrano 创建和管理nginx unicorn配置 Capistrano-Nginx-Unicorn用于配置和管理nginx unicorn的Capistrano 任务 Rails 应用程序的零停机部署的组合。将 Capistrano 任务提供给:...
**标题解析:** "使用Mina轻松部署Rails(而且确实非常快!)" 这个标题指出,我们将探讨如何利用Mina工具高效且迅速地部署Ruby on Rails应用。Mina是一个轻量级、基于任务的部署工具,它允许开发者以SSH协议在远程...
项目部署通常选择Heroku、AWS、DigitalOcean等平台,使用Git进行版本控制,通过Capistrano等工具自动化部署。监控和日志管理也很重要,如使用New Relic、Lograge等工具。 10. **测试**: Rails鼓励TDD(测试驱动...
这款工具在IT行业中广泛应用于Web应用的部署,尤其在Rails社区中享有盛誉。它简化了部署过程,提高了效率,减少了手动操作带来的潜在错误。 **1. Ruby:基础语言** Ruby是一种面向对象的、动态类型的编程语言,以其...
7. 部署与运维:如使用Capistrano部署Rails应用,Nginx和Passenger的配置。 Ruby社区活跃,拥有丰富的第三方库(Gems)和广泛的文档资源,如RubyDoc和Stack Overflow,为学习和解决问题提供了便利。通过Ruby5的学习...
capistrano-rails宝石包括专门为Ruby on Rails设计的附加功能,特别是Asset Pipeline支持和数据库迁移支持。 Capistrano使用SSH进行部署。 因此,您必须能够从部署系统到目标系统进行SSH(最好使用密钥和ssh-agent...