Настоящая проблема возникает, когда вы работаете с приложением Rails с открытым исходным кодом, которое должно иметь настраиваемый адаптер базы данных. Я разрабатываю ветку Rails 3 Fat Free CRM.
Я предпочитаю postgres, но мы хотим, чтобы база данных по умолчанию была mysql2.
В этом случае Gemfile.lock
все еще необходимо зарегистрировать с набором драгоценных камней по умолчанию, но я должен игнорировать изменения, которые я внес в него на моей машине. Для этого я запускаю:
git update-index --assume-unchanged Gemfile.lock
и наоборот:
git update-index --no-assume-unchanged Gemfile.lock
Также полезно включить что-то вроде следующего кода в ваш Gemfile
. Это загрузит соответствующий гем адаптера базы данных, основанный на вашем 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]
# -----------------------------------------------------------------------------
Я не могу сказать, является ли это признанной лучшей практикой или нет, но она хорошо работает для меня.