Używam usługi meskyanichi: backup gem. W zasadzie robi to, czego potrzebuję, ale muszę mieć wiele kopii zapasowych (np. Co godzinę, codziennie, co tydzień). Konfiguracje są w większości takie same, ale mają kilka różnic, więc muszę mieć wiele plików konfiguracyjnych. Mam problem ze znalezieniem rozsądnego sposobu zarządzania wspólnymi bitami konfiguracji (tzn. Nie powtarzania części wspólnych).Klejnot kopii zapasowej Ruby - udostępniane konfiguracje?
Pliki konfiguracyjne używają wielu struktur bloków iz tego co wiem, każda kopia zapasowa musi mieć osobny plik konfiguracyjny (np. Config/backup/hourly.rb, config/backup/daily.rb, etc) . Typowy plik config wygląda następująco:
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
Następnie kopia zapasowa jest wykonywana la bundle exec backup perform -t my_backup -c path/to/config.rb
.
Mój pierwszy łup umożliwienie wspólnego config było zdefiniowanie metod, że mogę połączyć się z bloków:
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
Ale to się nie powiedzie z undefined method 'my_db_config' for #<Backup::Database::MySQL:0x10155adf0>
.
Moim zamiarem było, aby to zadziałało, a następnie podzielono wspólne funkcje konfiguracyjne na inny plik, który mogłem require
w każdym z moich plików konfiguracyjnych. Próbowałem również utworzenie pliku z kodem konfiguracyjnym i require
ing go do bloku definicji modelu
# 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
To również nie działa, a od późniejszych badań odkryłem, że to nie jest po prostu tak, że require
Prace. Coś bardziej zgodnego ze sposobem działania C/C++ na #include
(tzn. Ślepo wklejając zawartość do dowolnego zakresu, z którego jest wywoływana) może działać.
Wszelkie pomysły?
Świetny pomysł! Dzięki! – dantswain