Estoy usando meskyanichi's backup gem. En general, hace lo que necesito, pero necesito tener varias copias de seguridad (por ejemplo, por hora, por día, por semana). Las configuraciones son básicamente las mismas, pero tienen algunas diferencias, así que necesito tener múltiples archivos de configuración. Tengo problemas para encontrar una forma sensata de administrar los bits comunes de las configuraciones (es decir, no repetir las partes comunes).Ruby copia de seguridad joya - configuraciones compartidas?
Los archivos de configuración utilizan muchas estructuras de bloques, y por lo que puedo decir, cada copia de seguridad necesita tener un archivo de configuración separado (por ejemplo, config/backup/hourly.rb, config/backup/daily.rb, etc.) . Un típico archivo de configuración es el siguiente:
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
A continuación, la copia de seguridad se ejecuta a la bundle exec backup perform -t my_backup -c path/to/config.rb
.
Mi primer botín a permitir una configuración común fue definir los métodos que podría llamar a partir de los bloques:
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
Pero esto no funciona con un undefined method 'my_db_config' for #<Backup::Database::MySQL:0x10155adf0>
.
Mi intención era hacer que esto funcionara y luego dividir las funciones comunes de configuración en otro archivo que pudiera require
en cada uno de mis archivos de configuración. También probé la creación de un archivo con el código de configuración y require
ing en el bloque de definición del modelo:
# 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
Esto también no funciona, ya partir de la investigación posterior he descubierto que eso no es sólo la forma en que require
trabajos. Algo más en línea con la forma en que funciona C/C++ #include
(es decir, pegar a ciegas los contenidos en cualquier ámbito desde el que se llama) podría funcionar.
¿Alguna idea?
¡Excelente idea! ¡Gracias! – dantswain