2008-10-30 76 views
4

這可能是一個新手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' 

但我得到的錯誤抱怨未定義的任務對象。

回答

2
require 'my_extension' 

保存您的擴展在my_extension.rb

0

喬恩是正確的,這是要走的最簡單的方法,只是將它保存在一個單獨的文件,並使用require 'filename'。你也可以使用像Webistrano這樣的部署,這也支持Capistrano'Recipes'的形式。我已經在一些項目上使用了它一段時間,並且開始喜歡它。

+0

我試着這,但我得到錯誤抱怨任務對象沒有被定義。你在'my_extension'頂部需要什麼嗎? – drsnyder 2008-10-30 18:15:53

9

我只是用它嘗試多一點,什麼我發現是,你必須:

load 'config/my_module' 

我可以把我所有的共同的定義在這裏,只是將其加載到我的deploy.rb。

它從文檔中看出,加載負載並執行文件。或者,要求嘗試加載指定的庫。我並不完全確定真正的區別,但似乎當前的應用程序符號空間和庫需求之間存在一定的分離(因此未定義的任務對象的錯誤)在您執行操作時不是問題加載。

+0

Require需要用於加載Rubygems,但是如果它找到它們,它將首先加載給定的給定的本地文件。另外,require在第一次加載時不會運行該文件。除此之外,它們完全相同。所以你可以使用require來加載你自己的文件。 – webmat 2008-10-31 13:06:08

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 
相關問題