Я использую гем резервной копии meskyanichi . По большому счету, он делает то, что мне нужно, но мне нужно иметь несколько резервных копий (например, ежечасно, ежедневно, еженедельно). Конфигурации в основном одинаковы, но имеют несколько отличий, поэтому мне нужно иметь несколько файлов конфигурации. У меня возникли проблемы с поиском разумного способа управления общими частями конфигураций (т. Е. Не повторять общие части).
В файлах конфигурации используется множество блочных структур, и, насколько я могу судить, каждая резервная копия должна иметь отдельный файл конфигурации (например, config / backup / hourly.rb, config / backup / daily.rb и т. Д.). Типичный файл конфигурации выглядит следующим образом:
Backup::Model.new(:my_backup, 'My Backup') do
database MySQL do |db|
db.name = "my_database"
db.username = "foo"
db.password = "bar"
# etc
end
# similar for other config options
end
Затем выполняется резервное копирование как bundle exec backup выполнить -t my_backup -c path / to / config.rb
.
Моей первой попыткой включить общую конфигурацию было определение методов, которые я мог вызывать из блоков:
def my_db_config db
db.name = "my_database"
# etc
end
Backup::Model.new(:my_backup, 'My Backup') do
database MySQL do |db|
my_db_config db
end
#etc
end
Но это не удалось с undefined методом 'my_db_config' для #
.
Я намеревался заставить это работать, а затем разделить общие функции конфигурации в другой файл, который я мог потребовать
в каждом из моих файлов конфигурации. Я также попытался создать файл с кодом конфигурации, и потребовал, чтобы
вставил его в блок определения модели:
# common.rb
database MySQL do |db|
db.name = "my_database"
#etc
end
# config.rb
Backup::Model.new(:my_backup, 'My Backup') do
require "common.rb" # with the right path, etc
end
Это тоже не работает, и из последующих исследований я обнаружил, что это просто не так. что требует
работает. Может сработать нечто большее, соответствующее тому, как работает #include
C / C ++ (т.е. слепая вставка содержимого в любую область, из которой оно вызывается).
Есть идеи?