O verdadeiro problema acontece quando você está trabalhando em um aplicativo Rails de código aberto que precisa ter um adaptador de banco de dados configurável. Estou desenvolvendo a filial do Rails 3 do Fat Free CRM. Minha preferência é o postgres, mas queremos que o banco de dados padrão seja mysql2.
Nesse caso, Gemfile.lock
ainda é necessário fazer check-in com o conjunto padrão de gemas, mas preciso ignorar as alterações que fiz na máquina. Para fazer isso, eu corro:
git update-index --assume-unchanged Gemfile.lock
e para reverter:
git update-index --no-assume-unchanged Gemfile.lock
Também é útil incluir algo como o seguinte código no seu Gemfile
. Isso carrega a gema apropriada do adaptador de banco de dados, com base no seu 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]
# -----------------------------------------------------------------------------
Não sei dizer se essa é uma prática recomendada estabelecida ou não, mas funciona bem para mim.