Sto usando meskyanichi backup gem. In linea di massima fa quello che mi serve, ma ho bisogno di avere più backup (ad esempio, ogni ora, ogni giorno, ogni settimana). Le configurazioni sono quasi sempre le stesse ma hanno alcune differenze, quindi ho bisogno di avere più file di configurazione. Ho difficoltà a trovare un modo corretto per gestire i bit di configurazione comuni (ad esempio, non ripetere le parti comuni).Gemma di backup rubino - configurazioni condivise?
I file di configurazione utilizzano molte strutture a blocchi e, da quello che posso dire, ogni backup deve disporre di un file di configurazione separato (ad es. Config/backup/hourly.rb, config/backup/daily.rb, ecc.) . Un tipico file di configurazione è simile al seguente:
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
Poi il backup viene eseguito alla bundle exec backup perform -t my_backup -c path/to/config.rb
.
Il mio primo malloppo a consentire una configurazione comune è stato quello di definire i metodi che ho potuto chiamare dai blocchi:
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
Ma questo non riesce con un undefined method 'my_db_config' for #<Backup::Database::MySQL:0x10155adf0>
.
La mia intenzione era quella di far funzionare questo e poi dividere le funzioni di configurazione comuni in un altro file che potevo require
in ciascuno dei miei file di configurazione. Ho provato anche la creazione di un file con il codice di configurazione e require
ing che nel blocco di definizione del modello:
# 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
Anche questo non funziona, e dalle successive ricerche ho scoperto che questo non è solo il modo in cui require
lavori. Qualcosa di più in linea con il modo in cui funziona lo #include
di C/C++ (vale a dire incollando ciecamente il contenuto in qualsiasi ambito da cui viene chiamato) potrebbe funzionare.
Qualche idea?
Ottima idea! Grazie! – dantswain