@@ -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 |
|