这可能是一个新手红宝石问题。我有几个库和应用程序需要部署到几个不同的主机。所有应用程序和库将共享这些主机的一些常用设置 - 例如主机名,数据库服务器/用户/通行证等
我的目标是做一些事情:
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'
但是我收到错误抱怨未定义的任务对象。
答案 0 :(得分:9)
我只是尝试了一点,我发现的是你必须:
load 'config/my_module'
我可以将所有常用定义放在此处,然后将其加载到deploy.rb中。
从文档中可以看出加载并执行文件。或者,需要尝试加载指定的库。我并不完全确定真正的区别,但是当前应用程序符号空间与库需要之间存在一些分离(因此有关未定义任务对象的错误),当您执行此操作时,这不是问题加载。
答案 1 :(得分:2)
require 'my_extension'
将您的扩展程序保存在my_extension.rb
中答案 2 :(得分:0)
Jon说得对,这是最简单的方法,只需将其保存在单独的文件中并使用require 'filename'
即可。你也可以使用像Webistrano这样的花哨的东西进行部署,它也以Capistrano'Recipes'的形式支持。我已经在一些项目上使用了一段时间并且已经开始喜欢它了。
答案 3 :(得分:0)
我不确定您的需求有多复杂,但这对我来说非常适合部署:
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