使用 Capistrano 对rails app进行快速部署

仅转载了,还没有用过,如果有问题可留言,大家一起讨论

在进行 Rails 部署的时候你可以直接从 svn 或者 git 下面更新代码,运行 db:migrate 来进行数据库的更新,然后进行这样那样的操作后,再启动服务器,便可进行部署,即便你只有一台机器,你也会觉得太麻烦,如果你需要多台机器来运行,那你可 能就会觉得每次手工部署都是一场恶梦,你可以使用 shell 脚本来简化部署的程序。在用 Rails 开发应用时,你可以使用 Capistrano 插件来进行更简单的部署工作。简单来说,Capistrano 是一个通过 SSH 并行的在多台机器上执行相同命令的工具,使用用来安装一整批机器。 它通过一个个已有的和用户自定制的任务让部署过程简单化。
清单 20. 安装 Capistrano

gem sources -a http://gems.github.com/
gem install Capistrano

然后在 config/deploy.rb 中配置要部署的服务器的地址,各种服务器的角色以及每个服务器统一的用户名和密码,如下面的样例配置:
清单 21. 配置 Capistrano

set :application, "test_app" # 应用的名称
set :scm_username, "test" # 资源库的用户名
set :scm_password, 'test' # 资源库的密码
set :repository, Proc.new {"--username #{scm_username}
--password #{scm_password} svn://localhost/test_app/trunk"}
# 资源库
set :user, "test" # 服务器 SSH 用户名
set :password, 'test' # 服务器 SSH 密码
set :deploy_to, "/var/www/#{application} "
# 在服务器上的部署路径,默认的部署路径是 /u/apps/#{application}
role :Web, 'Web.test_app.com' # 前端 Web 服务器
role :app, 'app1.test_app.com', 'app2.test_app.com', 'app3.test_app.com' #Rails 应用服务器
role :db, 'app1.test_app.com', :primary => true
# 运行 migrate 脚本的机器,通常为其中一台应用服务器。

在使用 Capistrano 进行部署的时候,通常是这样使用 cap sometask来运行任务。你可以 先用 cap -h查看所有的选项,并用 cap -T查看现有的所有任务。如 cap migrate则在 role 为 db 的机器上执行 rake db:migrate命令。使用 Capistrano 的更多资料可以参考 http://wiki.capify.org 这个网站。另外,Capistrano 还可以使用在非 Rails 环境下进行自动部署,在配置好 ruby 环境和 Capistrano 插件后,再安装下面的插件即可:

清单 22. 非 Rails 环境使用 Capistrano

gem sources -a http://gems.github.com/
gem install leehambley-railsless-deploy


另外一种方法
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins 是一款持续集成工具,可以用来构建、测试、部署 Web 项目。下面是基于 Jenkins 部署 PHP 项目的步骤: 1. 安装 Jenkins 和必要的插件:Jenkins 需要安装在服务器上,安装方法可以参考官方文档。安装完毕后,需要安装 PHP 插件和 Git 插件。 2. 创建 Jenkins 任务:在 Jenkins 中创建一个新的任务,选择“构建一个自由风格的软件项目”。在“源码管理”中选择 Git,填写 Git 代码库的 URL 和认证信息。在“构建触发器”中选择“轮询 SCM”,以便 Jenkins 定期检查代码库中是否有新的代码提交。 3. 配置构建环境:在构建环境中配置 PHP 环境,以便 Jenkins 能够执行 PHP 脚本。可以使用插件中的“PHP”工具,也可以手动配置 PHP 环境变量。 4. 构建脚本:在“构建”中配置构建脚本,以便 Jenkins 执行构建操作。构建脚本可以使用 shell 脚本,也可以使用其他脚本语言。 5. 部署脚本:在构建完成后,可以使用部署脚本将 PHP 项目部署到服务器上。可以使用 scp 或者 rsync 等命令将代码复制到指定目录下,也可以使用其他部署工具,如 Capistrano 等。 6. 配置构建后操作:在 Jenkins 中配置构建后操作,可以执行测试、打包、部署等操作。可以使用插件中的“Publish Over SSH”插件将代码部署到远程服务器上。 7. 触发构建:在 Jenkins 中手动触发构建,以便测试是否部署成功。 以上是部署 PHP 项目的基本步骤,具体的实现可以根据具体的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值