Capistrano:如何将常见设置包含在多个项目的deploy.rb文件中
这可能是一个新手ruby问题。我有几个库和应用程序需要部署到几个不同的主机。所有的应用程序和库都将共享这些主机的一些常用设置 - 例如主机名,数据库服务器/用户/密码等Capistrano:如何将常见设置包含在多个项目的deploy.rb文件中
我的目标是做这样的事情:
cap host1 stage deploy
cap host2 stage deploy
cap host1 prod deploy
# ...
我的问题是你如何在你所有的deploy.rb文件包括这些常见的设置?更具体地讲,我想创建一个的RB文件,我可以包括有一些常用设置和一些主机特定的任务定义:
set :use_sudo, false
# set some other options
task :host1 do
role :app, "host1.example.com"
role :web, "host1.example.com"
role :db, "host1.example.com", :primary => true
set :rodb_host, "dbhost"
set :rodb_user, "user"
set :rodb_pass, "pass"
set :rodb_name, "db"
end
task :host2 do
#...
end
deploy.task :carsala do
transaction do
setup
update_code
symlink
end
end
然后“包括”在我所有的deploy.rb文件,其中该文件我定义stage,prod等,并根据需要覆盖任何“通用”配置参数。任何建议,将不胜感激。我尝试了一些不同的东西,但是我从所有人都得到了错误。
编辑:我已经试过
require 'my_module'
但我得到的错误抱怨未定义的任务对象。
require 'my_extension'
保存您的扩展在my_extension.rb
乔恩是正确的,这是要走的最简单的方法,只是将它保存在一个单独的文件,并使用require 'filename'
。你也可以使用像Webistrano这样的部署,这也支持Capistrano'Recipes'的形式。我已经在一些项目上使用了它一段时间,并且开始喜欢它。
我只是用它尝试多一点,什么我发现是,你必须:
load 'config/my_module'
我可以把我所有的共同的定义在这里,只是将其加载到我的deploy.rb。
它从文档中看出,加载负载并执行文件。或者,要求尝试加载指定的库。我并不完全确定真正的区别,但似乎当前的应用程序符号空间和库需求之间存在一定的分离(因此未定义的任务对象的错误)在您执行操作时不是问题加载。
Require需要用于加载Rubygems,但是如果它找到它们,它将首先加载给定的给定的本地文件。另外,require在第一次加载时不会运行该文件。除此之外,它们完全相同。所以你可以使用require来加载你自己的文件。 – webmat 2008-10-31 13:06:08
我不知道您的需求是多么复杂,但是这很适合我的部署:
set :application, "app"
set :scm, :subversion
# ... set all your common variables
task :staging do
set :repository, "http://app/repository/trunk/"
# ... set other uncommon variables in task
end
task :production do
set :repository, "http://app/repository/production/"
# ...
end
部署只是
cap staging deploy
或
cap production deploy
我试着这,但我得到错误抱怨任务对象没有被定义。你在'my_extension'顶部需要什么吗? – drsnyder 2008-10-30 18:15:53