Le vrai problème se produit lorsque vous travaillez sur une application Rails open-source qui doit disposer d'un adaptateur de base de données configurable. Je développe la branche Rails 3 de Fat Free CRM. Ma préférence est postgres, mais nous voulons que la base de données par défaut soit mysql2.
Dans ce cas, Gemfile.lock
doit toujours être archivé avec l'ensemble de gemmes par défaut, mais je dois ignorer les modifications que j'ai apportées à celui-ci sur ma machine. Pour ce faire, je lance:
git update-index --assume-unchanged Gemfile.lock
et inverser:
git update-index --no-assume-unchanged Gemfile.lock
Il est également utile d'inclure quelque chose comme le code suivant dans votre Gemfile
. Cela charge la gemme d'adaptateur de base de données appropriée, basée sur votre 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]
# -----------------------------------------------------------------------------
Je ne peux pas dire si c'est une bonne pratique établie ou non, mais cela fonctionne bien pour moi.