2010-11-24 7 views
2

Je déteste avoir le chemin vers le socket MySQL codé en dur dans mes fichiers Rails YAML. Il a tendance à casser des choses si vous voulez exécuter l'application sur un tas de systèmes différents pour le développement. Existe-t-il un moyen officiel d'utiliser une variable d'environnement ou similaire? Actuellement j'utilise ceci:Socket MySQL Ruby on Rails de l'environnement

diff --git a/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/vendor/rails/activerecord/ 
index 69e97b9..992387c 100644 
--- a/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb 
+++ b/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb 
@@ -50,7 +50,7 @@ module ActiveRecord 
     config = config.symbolize_keys 
     host  = config[:host] 
     port  = config[:port] 
-  socket = config[:socket] 
+  socket = ENV['MYSQL_SOCK'] || config[:socket] 
     username = config[:username] ? config[:username].to_s : 'root' 
     password = config[:password].to_s 
     database = config[:database] 

Répondre

3

Vous devriez avoir un fichier database.yml différent pour chaque système puisqu'il ne devrait pas être vérifié dans votre VCS.

+0

Je compile habituellement un fichier 'database.example.yml' pour cette raison. – tadman

+0

Mais que faire si je le veux dans mon VCS? Je veux garder ma version de configuration contrôlée. – singpolyma

+0

@singpolyma Quel est votre raisonnement pour garder la configuration versionnée? C'est une mauvaise pratique d'utiliser le même fichier database.yml pour tous vos systèmes. La plus grande raison est que vous avez des mots de passe là-dedans. Je recommande la suggestion de @ tadman d'avoir un template version.example.yml versionné, puis de créer le fichier réel basé sur ceci pour chaque système. –