¿Cuál es la mejor manera de almacenar información de configuración específica del proyecto en tareas de Ruby Rake?
Pregunta
Tengo tareas de rastrillo para obtener la base de datos de producción del servidor remoto, etc. Siempre son las mismas tareas, pero la información del servidor cambia por proyecto. Tengo el código aquí: https://gist.github.com/868423 En la última tarea, obtengo un error @Local_DB_DIR_PATH = NIL.
No creo que quiera usar las variables de entorno de shell porque no quiero configurarlas cada vez que uso el rastrillo o abro una nueva carcasa.
Solución
Pegue la configuración en un archivo YAML y léelo así:
require 'yaml'
config = YAML.load("config.yaml") # or wherever
$remote_host = config['remote_host']
$ssh_username = config['ssh_username']
# and so on
O simplemente puede leer un gran hash de configuración:
$config = YAML.load("config.yaml")
Tenga en cuenta que estoy usando globales aquí, no variables de instancia, por lo que no hay posibilidad de sorprenderme por el alcance variable.
config.yaml se vería así:
---
remote_host: some.host.name
ssh_username: myusername
other_setting: foo
whatever: bar
Tiendo a mantener una muestra config.yaml.sample registrada con el cuerpo principal del código que tiene un ejemplo pero la configuración no de trabajo para todo lo que puedo copiar a la configuración no versionada. A algunas personas les gusta mantener su configuración. Yaml se registró en una rama en vivo en el servidor en sí, para que esté versión, pero nunca me he molestado con eso.
Otros consejos
Debería usar Capistrano para esto, puede usar Mulitsage o simplemente separar la configuración del host en una tarea, el ejemplo Capistrano se vería así:
task :development do
server "development.host"
end
task :backup do
run "cd #{current_path}; rake db:dump"
download "remote_path", "local_path"
end
Y llámalo así:
cap development backup