Capistrano: Как включить общие настройки в несколько файлов deploy.rb проекта - PullRequest
4 голосов
/ 30 октября 2008

это, наверное, новенький рубиновый вопрос. У меня есть несколько библиотек и приложений, которые мне нужно развернуть на нескольких разных хостах. Все приложения и библиотеки будут иметь общие настройки для этих хостов, например имя хоста, сервер базы данных / пользователь / пароль и т. д.

Моя цель - сделать что-то вроде:

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'

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

Ответы [ 4 ]

9 голосов
/ 31 октября 2008

Я просто немного поэкспериментировал с этим и обнаружил, что вам нужно:

load 'config/my_module'

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

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

2 голосов
/ 30 октября 2008
require 'my_extension'

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

0 голосов
/ 31 октября 2008

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

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
0 голосов
/ 30 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...