El verdadero problema ocurre cuando está trabajando en una aplicación Rails de código abierto que necesita tener un adaptador de base de datos configurable. Estoy desarrollando la rama Rails 3 de Fat Free CRM. Mi preferencia es postgres, pero queremos que la base de datos predeterminada sea mysql2.
En este caso, Gemfile.lock
todavía es necesario que se registre con el conjunto predeterminado de gemas, pero debo ignorar los cambios que le hice en mi máquina. Para lograr esto, ejecuto:
git update-index --assume-unchanged Gemfile.lock
y para revertir:
git update-index --no-assume-unchanged Gemfile.lock
También es útil incluir algo como el siguiente código en su Gemfile
. Esto carga la gema de adaptador de base de datos adecuada, basada en su database.yml.
# Loads the database adapter gem based on config/database.yml (Default: mysql2)
# -----------------------------------------------------------------------------
db_gems = {"mysql2" => ["mysql2", ">= 0.2.6"],
"postgresql" => ["pg", ">= 0.9.0"],
"sqlite3" => ["sqlite3"]}
adapter = if File.exists?(db_config = File.join(File.dirname(__FILE__),"config","database.yml"))
db = YAML.load_file(db_config)
# Fetch the first configured adapter from config/database.yml
(db["production"] || db["development"] || db["test"])["adapter"]
else
"mysql2"
end
gem *db_gems[adapter]
# -----------------------------------------------------------------------------
No puedo decir si esta es una mejor práctica establecida o no, pero me funciona bien.