2008-10-30 4 views
4

это, вероятно, вопрос рубинового новичка. У меня есть несколько библиотек и приложений, которые мне нужно развернуть на несколько разных хостов. Все приложения и библиотеки будут иметь общие настройки для этих хостов. имя хоста, базы данных сервера/пользователя/пасс и т.д.Capistrano: Как включить общие настройки в несколько файлов проекта deploy.rb

Моя цель состоит в том, чтобы сделать что-то вроде:

cap host1 stage deploy 
cap host2 stage deploy 
cap host1 prod deploy 
# ... 

Мой вопрос заключается в том, как вы включаете эти общие настройки во всех ваших deploy.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 файлов где Я определяю этап, prod и т. Д. И при необходимости заменяю любые «общие» параметры конфигурации. Мы ценим любые предложения. Я пробовал несколько разных вещей, но я получаю ошибки от кепки для всех них.

Edit: Я пытался

require 'my_module' 

Но я получаю ошибки, жалующихся на неопределенный объект задачи.

ответ

2
require 'my_extension' 

Сохраните расширения в my_extension.rb

0

Jon имеет это право, что это самый простой путь, просто сохранить его в отдельный файл и использовать require 'filename'. Вы также можете использовать что-то вроде Webistrano для развертывания, которое также поддерживает это в виде Capistrano 'Recipes'. Я использовал его некоторое время на нескольких проектах и ​​полюбил его.

+0

Я попытался это, но я получаю ошибки, жалующиеся на объект задачи, который не определяется. Вам нужно что-нибудь в верхней части 'my_extension'? – drsnyder 2008-10-30 18:15:53

9

я просто экспериментировал с ним немного больше, и то, что я обнаружил, что вы должны:

load 'config/my_module' 

я могу поместить все мои общих определений здесь и просто загрузить его в мой deploy.rb.

Из документов, загружающих нагрузки и выполняющих этот файл, появляется сообщение. Кроме того, требуется попытка загрузить указанную библиотеку. Я не совсем уверен в реальной разнице, но кажется, что существует некоторое разделение между текущим пространством символов приложения и требованием библиотеки (следовательно, ошибки в неопределенном объекте задачи), что не является проблемой, когда вы выполняете нагрузки.

+0

Требование используется для загрузки Rubygems, но сначала загружает локальные файлы данных, если они их обнаружат. Кроме того, 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 

 Смежные вопросы

  • Нет связанных вопросов^_^