| @@ -63,9 +63,9 @@ GEM | ||
| 63 | 63 | railties (>= 3.2.6, < 5) | 
| 64 | 64 | warden (~> 1.2.3) | 
| 65 | 65 | diff-lcs (1.2.4) | 
| 66 | - dotenv (0.8.0) | |
| 67 | - dotenv-rails (0.8.0) | |
| 68 | - dotenv (= 0.8.0) | |
| 66 | + dotenv (0.9.0) | |
| 67 | + dotenv-rails (0.9.0) | |
| 68 | + dotenv (= 0.9.0) | |
| 69 | 69 | em-http-request (1.0.3) | 
| 70 | 70 | addressable (>= 2.2.3) | 
| 71 | 71 | cookiejar | 
| @@ -1,5 +1,6 @@ | ||
| 1 | 1 | require 'yaml' | 
| 2 | 2 | require 'pathname' | 
| 3 | +require 'dotenv' | |
| 3 | 4 |  | 
| 4 | 5 | # Edited by Andrew Cantino. Based on: https://gist.github.com/339471 | 
| 5 | 6 |  | 
| @@ -99,6 +100,28 @@ namespace :sync do | ||
| 99 | 100 |      return database["#{db}"]['username'], database["#{db}"]['password'], database["#{db}"]['database'], database["#{db}"]['host'] | 
| 100 | 101 | end | 
| 101 | 102 |  | 
| 103 | + # Used by remote_database_config to parse the remote .env file. Depends on the dotenv-rails gem. | |
| 104 | + class RemoteEnvLoader < Dotenv::Environment | |
| 105 | + def initialize(data) | |
| 106 | + @data = data | |
| 107 | + load | |
| 108 | + end | |
| 109 | + | |
| 110 | + def with_loaded_env | |
| 111 | + begin | |
| 112 | + saved_env = ENV.to_hash.dup | |
| 113 | + ENV.update(self) | |
| 114 | + yield | |
| 115 | + ensure | |
| 116 | + ENV.replace(saved_env) | |
| 117 | + end | |
| 118 | + end | |
| 119 | + | |
| 120 | + def read | |
| 121 | +      @data.split("\n") | |
| 122 | + end | |
| 123 | + end | |
| 124 | + | |
| 102 | 125 | # | 
| 103 | 126 | # Reads the database credentials from the remote config/database.yml file | 
| 104 | 127 | # +db+ the name of the environment to get the credentials for | 
| @@ -106,7 +129,13 @@ namespace :sync do | ||
| 106 | 129 | # | 
| 107 | 130 | def remote_database_config(db) | 
| 108 | 131 |      remote_config = capture("cat #{current_path}/config/database.yml") | 
| 109 | - database = YAML::load(remote_config) | |
| 132 | +    remote_env = capture("cat #{current_path}/.env") | |
| 133 | + | |
| 134 | + database = nil | |
| 135 | + RemoteEnvLoader.new(remote_env).with_loaded_env do | |
| 136 | + database = YAML::load(ERB.new(remote_config).result) | |
| 137 | + end | |
| 138 | + | |
| 110 | 139 |      return database["#{db}"]['username'], database["#{db}"]['password'], database["#{db}"]['database'], database["#{db}"]['host'] | 
| 111 | 140 | end | 
| 112 | 141 |  |