figaro 0.7.0 → 1.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +6 -14
- data/.gitignore +1 -1
- data/.travis.yml +23 -18
- data/CHANGELOG.md +98 -0
- data/CONTRIBUTING.md +48 -0
- data/Gemfile +4 -6
- data/{LICENSE → LICENSE.txt} +0 -0
- data/README.md +184 -61
- data/Rakefile +1 -12
- data/bin/figaro +5 -0
- data/doc/title.png +0 -0
- data/figaro.gemspec +9 -5
- data/gemfiles/rails30.gemfile +3 -4
- data/gemfiles/rails31.gemfile +3 -4
- data/gemfiles/rails32.gemfile +3 -4
- data/gemfiles/rails40.gemfile +3 -7
- data/gemfiles/rails41.gemfile +11 -0
- data/lib/figaro.rb +16 -29
- data/lib/figaro/application.rb +91 -0
- data/lib/figaro/cli.rb +24 -0
- data/lib/figaro/cli/heroku_set.rb +29 -0
- data/lib/figaro/cli/task.rb +27 -0
- data/lib/figaro/env.rb +36 -7
- data/lib/figaro/error.rb +12 -0
- data/lib/figaro/rails.rb +9 -0
- data/lib/figaro/rails/application.rb +21 -0
- data/lib/figaro/rails/railtie.rb +9 -0
- data/lib/figaro/{tasks.rake → rails/tasks.rake} +0 -0
- data/lib/generators/figaro/install/install_generator.rb +1 -1
- data/lib/generators/figaro/install/templates/application.yml +10 -6
- data/spec/figaro/application_spec.rb +258 -0
- data/spec/figaro/cli/heroku_set_spec.rb +62 -0
- data/spec/figaro/env_spec.rb +167 -35
- data/spec/figaro/rails/application_spec.rb +43 -0
- data/spec/figaro_spec.rb +74 -36
- data/spec/rails_spec.rb +66 -0
- data/spec/spec_helper.rb +6 -3
- data/spec/support/aruba.rb +19 -0
- data/spec/support/bin/heroku +5 -0
- data/spec/support/command_helpers.rb +17 -0
- data/spec/support/command_interceptor.rb +33 -0
- data/spec/support/random.rb +3 -0
- data/spec/support/reset.rb +13 -0
- metadata +88 -44
- data/features/rails.feature +0 -97
- data/features/step_definitions/bundler_steps.rb +0 -7
- data/features/step_definitions/common_steps.rb +0 -19
- data/features/step_definitions/rails_steps.rb +0 -12
- data/features/support/aruba.rb +0 -12
- data/features/support/env.rb +0 -8
- data/lib/figaro/railtie.rb +0 -16
- data/lib/figaro/tasks.rb +0 -28
- data/spec/figaro/tasks_spec.rb +0 -71
- data/spec/support/rake.rb +0 -11
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
M2Y4NjlmNjJhNTZmOGM2MTAzODhlZjBmYzg3ZGNkMzQxNDFlMWI5ZTgxNzlj
|
10
|
-
YmQ5YmY4NDlhZDI5ZTIyZDA0ODc4NDI0NmViNzVhYjdmMDI1YWM0YWU3Zjkw
|
11
|
-
NTBkNDJmY2ZkYjdiMDk0NzQwZmI0ZmFlM2M4NDBmYTNhOTA1MTI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjBlYWZkZDU5MzA3NjJlNjc3N2FlZjE0OWIwZDA1YzA1MjRhM2NiNDI1MzA0
|
14
|
-
MjQxNjYwNzRlYWFiNDM5YzYzY2Q0ODAzZDA3ZDVjZjVmMzcyMTk5Nzk2ZTRh
|
15
|
-
ZDE0MDk1ZmJkZjRjMzkyNjk1ZmU3M2ExNjE5NmJlZGVjMmM0Y2Y=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: be2f663928712ac1479ead89e437afa4de7e36dd
|
4
|
+
data.tar.gz: 6343872755d9414093758aabc50a027bc4eedd6d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 47fd66bb0def311e27c08271e0f03c0fe16886505882ec98fdfe5ec0b8862d800a6ce79b68f19d2fe741729b76774b98340ce845660712e2de5b264441a41105
|
7
|
+
data.tar.gz: 78fb3923162e6b3f79d23d9ab0e8118d6b267958da1c0401877c287cacdcccf2c90ac6a2ef8b8aee31ee8aa4ac848b81f4652b637afc529578e8107173461f5e
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,27 +1,32 @@
|
|
1
|
-
|
1
|
+
before_script:
|
2
|
+
- unset RAILS_ENV
|
3
|
+
- unset RACK_ENV
|
4
|
+
branches:
|
5
|
+
only:
|
6
|
+
- master
|
7
|
+
env:
|
8
|
+
global:
|
9
|
+
secure: | # CODECLIMATE_REPO_TOKEN
|
10
|
+
Pm3j2/BtAzMtqRMP83rFvDtpUNeIAdLMzwH62In+3h/AE8gHDArGYS+jmChw
|
11
|
+
2hKVjwzVUTWZlpSEocqAg/YIDB3BJzWmyc6UP+VA0gji6HsufXYTmKAVPSVY
|
12
|
+
TQ7mPPP7hm95e3SkFbLdLbGkQfLdjIKeMY5lY/knX+QKUCjO52Y=
|
2
13
|
gemfile:
|
3
14
|
- gemfiles/rails30.gemfile
|
4
15
|
- gemfiles/rails31.gemfile
|
5
16
|
- gemfiles/rails32.gemfile
|
6
17
|
- gemfiles/rails40.gemfile
|
18
|
+
- gemfiles/rails41.gemfile
|
7
19
|
language: ruby
|
8
|
-
rvm:
|
9
|
-
- 1.8.7
|
10
|
-
- 1.9.2
|
11
|
-
- 1.9.3
|
12
|
-
- 2.0.0
|
13
|
-
before_install:
|
14
|
-
- gem update bundler
|
15
|
-
before_script:
|
16
|
-
- unset RAILS_ENV
|
17
|
-
- unset RACK_ENV
|
18
20
|
matrix:
|
19
|
-
|
20
|
-
-
|
21
|
-
rvm: 1.8.7
|
22
|
-
- gemfile: gemfiles/rails40.gemfile
|
23
|
-
rvm: 1.9.2
|
21
|
+
allow_failures:
|
22
|
+
- rvm: ruby-head
|
24
23
|
include:
|
25
|
-
- gemfile:
|
26
|
-
rvm: 2.
|
24
|
+
- gemfile: Gemfile
|
25
|
+
rvm: "2.1"
|
27
26
|
env: COVERAGE=1
|
27
|
+
rvm:
|
28
|
+
- 1.9.3
|
29
|
+
- 2.0.0
|
30
|
+
- "2.1"
|
31
|
+
- ruby-head
|
32
|
+
script: bundle exec rspec
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
## 1.0.0.rc1 / Unreleased
|
2
|
+
|
3
|
+
* [FEATURE] Add bang and boolean methods to `Figaro.env`
|
4
|
+
* [ENHANCEMENT] Detach `Figaro.env` from the configuration file hash
|
5
|
+
* [FEATURE] Add the ability to swap Figaro's application adapter
|
6
|
+
* [FEATURE] Warn when configuration keys or values are not strings
|
7
|
+
* [FEATURE] Enable Figaro to load multiple times, overwriting previous values
|
8
|
+
* [FEATURE] Load Figaro configuration prior to database configuration
|
9
|
+
* [ENHANCEMENT] Test against Ruby 2.1
|
10
|
+
* [ENHANCEMENT] Test against Rails 4.1
|
11
|
+
* [FEATURE] Replace Rake task with `figaro` executable
|
12
|
+
* [BUGFIX] Fix character escaping for `figaro heroku:set` on Windows
|
13
|
+
* [FEATURE] Warn when a preexisting configuration key is skipped during load
|
14
|
+
* [FEATURE] Add the ability to fail fast in the absence of required keys
|
15
|
+
* [FEATURE] Tie into Rails' earliest possible `before_configuration` hook
|
16
|
+
|
17
|
+
## 0.7.0 / 2013-06-27
|
18
|
+
|
19
|
+
* [FEATURE] Allow configuration values to be overridden on the system level
|
20
|
+
* [FEATURE] Enable ERB evaluation of the configuration file
|
21
|
+
|
22
|
+
## 0.6.4 / 2013-05-01
|
23
|
+
|
24
|
+
* [BUGFIX] Make the configuration file path platform-independent
|
25
|
+
* [FEATURE] Make `Figaro.env` proxy method calls case-insensitive
|
26
|
+
|
27
|
+
## 0.6.3 / 2013-03-10
|
28
|
+
|
29
|
+
* [BUGFIX] Run Heroku commands with a clean Bundler environment
|
30
|
+
|
31
|
+
## 0.6.2 / 2013-03-07
|
32
|
+
|
33
|
+
* [ENHANCEMENT] Refactor `figaro:heroku` task into a unit-tested class
|
34
|
+
* [ENHANCEMENT] Relax development gem dependency version requirements
|
35
|
+
* [ENHANCEMENT] Track test coverage
|
36
|
+
|
37
|
+
## 0.6.1 / 2013-02-27
|
38
|
+
|
39
|
+
* [ENHANCEMENT] Declare development gem dependencies in gemfiles
|
40
|
+
* [BUGFIX] Cast boolean configuration values to strings
|
41
|
+
* [ENHANCEMENT] Use RSpec `expect` syntax
|
42
|
+
|
43
|
+
## 0.6.0 / 2013-02-26
|
44
|
+
|
45
|
+
* [ENHANCEMENT] Test against Ruby 2.0.0
|
46
|
+
* [ENHANCEMENT] Test against Rails 4.0
|
47
|
+
|
48
|
+
## 0.5.4 / 2013-02-22
|
49
|
+
|
50
|
+
* [ENHANCEMENT] GitHub Ruby Styleguide conventions
|
51
|
+
* [ENHANCEMENT] Remove unnecessary development dependencies
|
52
|
+
* [FEATURE] Allow `nil` values in `Figaro.env`
|
53
|
+
|
54
|
+
## 0.5.3 / 2013-01-12
|
55
|
+
|
56
|
+
* [BUGFIX] Fix `figaro:heroku` to properly capture standard output... again
|
57
|
+
|
58
|
+
## 0.5.2 / 2013-01-07
|
59
|
+
|
60
|
+
* [BUGFIX] Escape special characters in the `figaro:heroku` task
|
61
|
+
|
62
|
+
## 0.5.1 / 2013-01-07
|
63
|
+
|
64
|
+
* [BUGFIX] Fix `figaro:heroku` to properly capture standard output
|
65
|
+
|
66
|
+
## 0.5.0 / 2012-10-28
|
67
|
+
|
68
|
+
* [BUGFIX] Automatically cast configuration keys and values to strings
|
69
|
+
* [FEATURE] Allow the `figaro:heroku` task to respect remote Rails environment
|
70
|
+
* [FEATURE] Enable `Figaro.env` to act as a proxy to `ENV`
|
71
|
+
|
72
|
+
## 0.4.1 / 2012-04-25
|
73
|
+
|
74
|
+
* [BUGFIX] Fix `figaro:heroku` Rake task failures
|
75
|
+
|
76
|
+
## 0.4.0 / 2012-04-20
|
77
|
+
|
78
|
+
* [FEATURE] Allow environment-specific configuration
|
79
|
+
|
80
|
+
## 0.3.0 / 2012-04-20
|
81
|
+
|
82
|
+
* [ENHANCEMENT] Refactor the loading configuration into `ENV`
|
83
|
+
* [FEATURE] Add `figaro:heroku` Rake task
|
84
|
+
|
85
|
+
## 0.2.0 / 2012-04-03
|
86
|
+
|
87
|
+
* [ENHANCEMENT] Test against multiple Rails versions (3.0, 3.1, 3.2)
|
88
|
+
* [FEATURE] Add `figaro:install` Rails generator
|
89
|
+
* [BUGFIX] Gracefully parse YAML files containing only comments
|
90
|
+
|
91
|
+
## 0.1.1 / 2012-04-02
|
92
|
+
|
93
|
+
* [ENHANCEMENT] Remove RSpec development gem dependency
|
94
|
+
* [ENHANCEMENT] Introduce Figaro, the mascot
|
95
|
+
|
96
|
+
## 0.1.0 / 2012-04-02
|
97
|
+
|
98
|
+
* Initial release!
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# Contributing to Figaro
|
2
|
+
|
3
|
+
Figaro is open source and contributions from the community are encouraged! No
|
4
|
+
contribution is too small.
|
5
|
+
|
6
|
+
Please consider:
|
7
|
+
|
8
|
+
* Adding a feature
|
9
|
+
* Squashing a bug
|
10
|
+
* Writing documentation
|
11
|
+
* Fixing a typo
|
12
|
+
* Correcting [style](https://github.com/styleguide/ruby)
|
13
|
+
|
14
|
+
## How do I contribute?
|
15
|
+
|
16
|
+
For the best chance of having your changes merged, please:
|
17
|
+
|
18
|
+
1. [Fork](https://github.com/laserlemon/figaro/fork) the project.
|
19
|
+
2. [Write](http://en.wikipedia.org/wiki/Test-driven_development) a failing test.
|
20
|
+
3. [Commit](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) changes that fix the tests.
|
21
|
+
4. [Submit](https://github.com/laserlemon/figaro/pulls) a pull request with *at least* one animated GIF.
|
22
|
+
5. Be patient.
|
23
|
+
|
24
|
+
If your proposed changes only affect documentation, include the following on a
|
25
|
+
new line in each of your commit messages:
|
26
|
+
|
27
|
+
```
|
28
|
+
[ci skip]
|
29
|
+
```
|
30
|
+
|
31
|
+
This will signal [Travis](https://travis-ci.org) that running the test suite is
|
32
|
+
not necessary for these changes.
|
33
|
+
|
34
|
+
## Bug Reports
|
35
|
+
|
36
|
+
If you are experiencing unexpected behavior and, after having read Figaro's
|
37
|
+
documentation, are convinced this behavior is a bug, please:
|
38
|
+
|
39
|
+
1. [Search](https://github.com/laserlemon/figaro/issues) existing issues.
|
40
|
+
2. Collect enough information to reproduce the issue:
|
41
|
+
* Figaro version
|
42
|
+
* Ruby version
|
43
|
+
* Rails version
|
44
|
+
* Specific setup conditions
|
45
|
+
* Description of expected behavior
|
46
|
+
* Description of actual behavior
|
47
|
+
3. [Submit](https://github.com/laserlemon/figaro/issues/new) an issue.
|
48
|
+
4. Be patient.
|
data/Gemfile
CHANGED
@@ -2,13 +2,11 @@ source "https://rubygems.org"
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
-
gem "rails", ">= 3.0.
|
5
|
+
gem "rails", ">= 3.0.3", "< 5"
|
6
6
|
|
7
7
|
group :test do
|
8
8
|
gem "aruba", "~> 0.5"
|
9
|
-
gem "
|
10
|
-
gem "
|
11
|
-
gem "
|
12
|
-
gem "rspec", "~> 2.13"
|
13
|
-
gem "simplecov", "~> 0.7", :require => false
|
9
|
+
gem "codeclimate-test-reporter", "~> 0.3.0", require: false
|
10
|
+
gem "rspec", "~> 2.14"
|
11
|
+
gem "sqlite3", "~> 1.3"
|
14
12
|
end
|
data/{LICENSE → LICENSE.txt}
RENAMED
File without changes
|
data/README.md
CHANGED
@@ -1,114 +1,237 @@
|
|
1
|
-
# Figaro
|
2
|
-
[](http://badge.fury.io/rb/figaro)
|
3
|
-
[](https://travis-ci.org/laserlemon/figaro)
|
4
|
-
[](https://codeclimate.com/github/laserlemon/figaro)
|
5
|
-
[](https://coveralls.io/r/laserlemon/figaro)
|
6
|
-
[](https://gemnasium.com/laserlemon/figaro)
|
1
|
+
# 
|
7
2
|
|
8
|
-
Simple Rails app configuration
|
3
|
+
Simple, Heroku-friendly Rails app configuration using `ENV` and a single YAML file
|
9
4
|
|
10
|
-
|
5
|
+
[](http://badge.fury.io/rb/figaro)
|
6
|
+
[](https://travis-ci.org/laserlemon/figaro)
|
7
|
+
[](https://codeclimate.com/github/laserlemon/figaro)
|
8
|
+
[](https://codeclimate.com/github/laserlemon/figaro)
|
9
|
+
[](https://gemnasium.com/laserlemon/figaro)
|
11
10
|
|
12
|
-
|
11
|
+
## Why does Figaro exist?
|
13
12
|
|
14
|
-
|
13
|
+
Figaro was written to make it easy to securely configure Rails applications.
|
15
14
|
|
16
|
-
|
15
|
+
Configuration values often include sensitive information. Figaro strives to be secure by default by encouraging a convention that keeps configuration out of Git.
|
17
16
|
|
18
|
-
## How does
|
17
|
+
## How does Figaro work?
|
19
18
|
|
20
|
-
|
19
|
+
Figaro is inspired by the [Twelve-Factor App](http://12factor.net) methodology, which states:
|
21
20
|
|
22
|
-
|
21
|
+
> The twelve-factor app stores config in environment variables (often shortened to env vars or env). Env vars are easy to change between deploys without changing any code; unlike config files, there is little chance of them being checked into the code repo accidentally; and unlike custom config files, or other config mechanisms such as Java System Properties, they are a language- and OS-agnostic standard.
|
23
22
|
|
24
|
-
|
23
|
+
This is straightforward in production environments but local development environments are often shared between multiple applications, requiring multiple configurations.
|
25
24
|
|
26
|
-
|
25
|
+
Figaro parses a Git-ignored YAML file in your application and loads its values into `ENV`.
|
27
26
|
|
28
|
-
|
27
|
+
### Example
|
28
|
+
|
29
|
+
Given the following configuration file:
|
30
|
+
|
31
|
+
```yaml
|
32
|
+
# config/application.yml
|
33
|
+
|
34
|
+
pusher_app_id: "2954"
|
35
|
+
pusher_key: "7381a978f7dd7f9a1117"
|
36
|
+
pusher_secret: "abdc3b896a0ffb85d373"
|
37
|
+
```
|
38
|
+
|
39
|
+
You can configure [Pusher](http://pusher.com) in an initializer:
|
29
40
|
|
30
41
|
```ruby
|
31
|
-
|
42
|
+
# config/initializers/pusher.rb
|
43
|
+
|
44
|
+
Pusher.app_id = ENV["pusher_app_id"]
|
45
|
+
Pusher.key = ENV["pusher_key"]
|
46
|
+
Pusher.secret = ENV["pusher_secret"]
|
32
47
|
```
|
33
48
|
|
34
|
-
|
49
|
+
**Please note:** `ENV` is a simple key/value store. All values will be converted to strings. Deeply nested configuration structures are not possible.
|
35
50
|
|
36
|
-
|
37
|
-
|
51
|
+
### Environment-Specific Configuration
|
52
|
+
|
53
|
+
Oftentimes, local configuration values change depending on Rails environment. In such cases, you can add environment-specific values to your configuration file:
|
54
|
+
|
55
|
+
```yaml
|
56
|
+
# config/application.yml
|
57
|
+
|
58
|
+
pusher_app_id: "2954"
|
59
|
+
pusher_key: "7381a978f7dd7f9a1117"
|
60
|
+
pusher_secret: "abdc3b896a0ffb85d373"
|
61
|
+
|
62
|
+
test:
|
63
|
+
pusher_app_id: "5112"
|
64
|
+
pusher_key: "ad69caf9a44dcac1fb28"
|
65
|
+
pusher_secret: "83ca7aa160fedaf3b350"
|
38
66
|
```
|
39
67
|
|
40
|
-
|
68
|
+
You can also nullify configuration values for a specific environment:
|
41
69
|
|
42
|
-
|
70
|
+
```yaml
|
71
|
+
# config/application.yml
|
72
|
+
|
73
|
+
google_analytics_key: "UA-35722661-5"
|
74
|
+
|
75
|
+
test:
|
76
|
+
google_analytics_key: ~
|
77
|
+
```
|
78
|
+
|
79
|
+
### Using `Figaro.env`
|
80
|
+
|
81
|
+
`Figaro.env` is a convenience that acts as a proxy to `ENV`.
|
82
|
+
|
83
|
+
In testing, it is sometimes more convenient to stub and unstub `Figaro.env` than to set and reset `ENV`. Whether your application uses `ENV` or `Figaro.env` is entirely a matter of personal preference.
|
84
|
+
|
85
|
+
```yaml
|
86
|
+
# config/application.yml
|
87
|
+
|
88
|
+
stripe_api_key: "sk_live_dSqzdUq80sw9GWmuoI0qJ9rL"
|
89
|
+
```
|
43
90
|
|
44
91
|
```ruby
|
45
|
-
|
46
|
-
|
47
|
-
|
92
|
+
ENV["stripe_api_key"] # => "sk_live_dSqzdUq80sw9GWmuoI0qJ9rL"
|
93
|
+
ENV.key?("stripe_api_key") # => true
|
94
|
+
ENV["google_analytics_key"] # => nil
|
95
|
+
ENV.key?("google_analytics_key") # => false
|
96
|
+
|
97
|
+
Figaro.env.stripe_api_key # => "sk_live_dSqzdUq80sw9GWmuoI0qJ9rL"
|
98
|
+
Figaro.env.stripe_api_key? # => true
|
99
|
+
Figaro.env.google_analytics_key # => nil
|
100
|
+
Figaro.env.google_analytics_key? # => false
|
48
101
|
```
|
49
102
|
|
50
|
-
|
103
|
+
### Required Keys
|
104
|
+
|
105
|
+
If a particular configuration value is required but not set, it's appropriate to raise an error. With Figaro, you can either raise these errors proactively or lazily.
|
106
|
+
|
107
|
+
To proactively require configuration keys:
|
51
108
|
|
52
109
|
```ruby
|
53
|
-
|
54
|
-
|
55
|
-
|
110
|
+
# config/initializers/figaro.rb
|
111
|
+
|
112
|
+
Figaro.require("pusher_app_id", "pusher_key", "pusher_secret")
|
56
113
|
```
|
57
114
|
|
58
|
-
|
115
|
+
If any of the configuration keys above are not set, your application will raise an error during initialization. This method is preferred because it prevents runtime errors in a production application due to improper configuration.
|
59
116
|
|
60
|
-
|
117
|
+
To require configuration keys lazily, reference the variables via "bang" methods on `Figaro.env`:
|
61
118
|
|
62
|
-
```
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
119
|
+
```ruby
|
120
|
+
# config/initializers/pusher.rb
|
121
|
+
|
122
|
+
Pusher.app_id = Figaro.env.pusher_app_id!
|
123
|
+
Pusher.key = Figaro.env.pusher_key!
|
124
|
+
Pusher.secret = Figaro.env.pusher_secret!
|
68
125
|
```
|
69
126
|
|
70
|
-
|
127
|
+
### Deployment
|
71
128
|
|
72
|
-
|
129
|
+
Figaro is written with deployment in mind. In fact, [Heroku](https://www.heroku.com)'s use of `ENV` for application configuration was the original inspiration for Figaro.
|
73
130
|
|
74
|
-
Heroku
|
131
|
+
#### Heroku
|
75
132
|
|
76
|
-
|
133
|
+
Heroku already makes setting application configuration easy:
|
77
134
|
|
78
135
|
```bash
|
79
|
-
heroku config:
|
80
|
-
heroku config:add PUSHER_KEY=0463644d89a340ff1132
|
81
|
-
heroku config:add PUSHER_SECRET=0eadfd9847769f94367b
|
82
|
-
heroku config:add STRIPE_API_KEY=jHXKPPE0dUW84xJNYzn6CdWM2JfrCbPE
|
83
|
-
heroku config:add STRIPE_PUBLIC_KEY=pk_HHtUKJwlN7USCT6nE5jiXgoduiNl3
|
136
|
+
$ heroku config:set google_analytics_key=UA-35722661-5
|
84
137
|
```
|
85
138
|
|
86
|
-
|
139
|
+
Using the `figaro` command, you can set values from your configuration file all at once:
|
87
140
|
|
88
141
|
```bash
|
89
|
-
|
142
|
+
$ figaro heroku:set -e production
|
90
143
|
```
|
91
144
|
|
92
|
-
|
145
|
+
For more information:
|
93
146
|
|
94
147
|
```bash
|
95
|
-
|
148
|
+
$ figaro help heroku:set
|
96
149
|
```
|
97
150
|
|
98
|
-
|
151
|
+
#### Other Hosts
|
152
|
+
|
153
|
+
If you're not deploying to Heroku, you have two options:
|
154
|
+
|
155
|
+
* Generate a remote configuration file
|
156
|
+
* Set `ENV` variables directly
|
157
|
+
|
158
|
+
Generating a remote configuration file is preferred because of:
|
159
|
+
|
160
|
+
* familiarity – Management of `config/application.yml` is like that of `config/database.yml`.
|
161
|
+
* isolation – Multiple applications on the same server will not produce configuration key collisions.
|
162
|
+
|
163
|
+
## Is Figaro like [dotenv](https://github.com/bkeepers/dotenv)?
|
164
|
+
|
165
|
+
Yes. Kind of.
|
166
|
+
|
167
|
+
Figaro and dotenv were written around the same time to solve similar problems.
|
168
|
+
|
169
|
+
### Similarities
|
170
|
+
|
171
|
+
* Both libraries are useful for Ruby application configuration.
|
172
|
+
* Both are popular and well maintained.
|
173
|
+
* Both are inspired by Twelve-Factor App's concept of proper [configuration](http://12factor.net/config).
|
174
|
+
* Both store configuration values in `ENV`.
|
175
|
+
|
176
|
+
### Differences
|
177
|
+
|
178
|
+
* Configuration File
|
179
|
+
* Figaro expects a single file.
|
180
|
+
* Dotenv supports separate files for each environment.
|
181
|
+
* Configuration File Format
|
182
|
+
* Figaro expects YAML containing key/value pairs.
|
183
|
+
* Dotenv convention is a collection of `KEY=VALUE` pairs.
|
184
|
+
* Security vs. Convenience
|
185
|
+
* Figaro convention is to never commit configuration files.
|
186
|
+
* Dotenv encourages committing configuration files containing development values.
|
187
|
+
* Framework Focus
|
188
|
+
* Figaro was written with a focus on Rails development and conventions.
|
189
|
+
* Dotenv was written to accommodate any type of Ruby application.
|
190
|
+
|
191
|
+
Either library may suit your configuration needs. It often boils down to personal preference.
|
192
|
+
|
193
|
+
## Is application.yml like [secrets.yml](https://github.com/rails/rails/blob/v4.1.0/railties/lib/rails/generators/rails/app/templates/config/secrets.yml)?
|
194
|
+
|
195
|
+
Yes. Kind of.
|
196
|
+
|
197
|
+
Rails 4.1 introduced the `secrets.yml` convention for Rails application configuration. Figaro predated the Rails 4.1 release by two years.
|
198
|
+
|
199
|
+
### Similarities
|
200
|
+
|
201
|
+
* Both are useful for Rails application configuration.
|
202
|
+
* Both are popular and well maintained.
|
203
|
+
* Both expect a single YAML file.
|
204
|
+
|
205
|
+
### Differences
|
206
|
+
|
207
|
+
* Configuration Access
|
208
|
+
* Figaro stores configuration values in `ENV`.
|
209
|
+
* Rails stores configuration values in `Rails.application.secrets`.
|
210
|
+
* Configuration File Structure
|
211
|
+
* Figaro expects YAML containing key/value string pairs.
|
212
|
+
* Secrets may contain nested structures with rich objects.
|
213
|
+
* Security vs. Convenience
|
214
|
+
* Figaro convention is to never commit configuration files.
|
215
|
+
* Secrets are committed by default.
|
216
|
+
* Consistency
|
217
|
+
* Figaro uses `ENV` for configuration in every environment.
|
218
|
+
* Secrets encourage using `ENV` for production only.
|
219
|
+
* Approach
|
220
|
+
* Figaro is inspired by Twelve-Factor App's concept of proper [configuration](http://12factor.net/config).
|
221
|
+
* Secrets are… not.
|
222
|
+
|
223
|
+
The emergence of a configuration convention for Rails is an important step, but as long as the last three differences above exist, Figaro will continue to be developed as a more secure, more consistent, and more standards-compliant alternative to `secrets.yml`.
|
99
224
|
|
100
|
-
|
225
|
+
For more information, read the original [The Marriage of Figaro… and Rails](http://www.collectiveidea.com/blog/archives/2013/12/18/the-marriage-of-figaro-and-rails/) blog post.
|
101
226
|
|
102
|
-
|
227
|
+
## Who wrote Figaro?
|
103
228
|
|
104
|
-
|
229
|
+
My name is Steve Richert and I wrote Figaro in March, 2012 with overwhelming encouragement from my employer, [Collective Idea](http://www.collectiveidea.com). Figaro has improved very much since then, thanks entirely to [inspiration](https://github.com/laserlemon/figaro/issues) and [contribution](https://github.com/laserlemon/figaro/graphs/contributors) from developers everywhere.
|
105
230
|
|
106
|
-
|
107
|
-
2. Make it better.
|
108
|
-
3. Send me a pull request.
|
231
|
+
**Thank you!**
|
109
232
|
|
110
|
-
##
|
233
|
+
## How can I help?
|
111
234
|
|
112
|
-
|
235
|
+
Figaro is open source and contributions from the community are encouraged! No contribution is too small.
|
113
236
|
|
114
|
-
|
237
|
+
See Figaro's [contribution guidelines](CONTRIBUTING.md) for more information.
|