Reputation: 19505
I have all my environment variables in config/initializers/app_environment_variables.rb
and this setup has been working so far, except now I need to use the variables in config/environments.rb
and config/environments/*.rb
, which seem to be executed before config/initializer/*.rb
.
I found this page showing "the configuration order" as the following,
but that info is from 2009, whereas I am on Rails 3.1
. I expected to see this kind of info in the "initialization" or the "configuring" guides, but either I was unable to find the info, or it's not there.
Upvotes: 3
Views: 4658
Reputation: 19505
I added puts "--- #{__FILE__}"
to the top of each of the following files in a new "demo" app (rails new demo
):
config.ru
config/application.rb
config/boot.rb
config/environment.rb
config/environments/development.rb
config/initializers/hello.rb
Then I simply started the app with rails server
, and got the following output (....
for terseness):
--- /Volumes/..../initialization-order/demo/config/boot.rb
--- /Volumes/..../initialization-order/demo/config/application.rb
=> Booting WEBrick
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
--- /Volumes/..../initialization-order/demo/config.ru
--- /Volumes/..../initialization-order/demo/config/environment.rb
--- /Volumes/..../initialization-order/demo/config/environments/development.rb
--- /Volumes/..../initialization-order/demo/config/initializers/hello.rb
[2013-05-16 15:05:59] INFO WEBrick 1.3.1
[2013-05-16 15:05:59] INFO ruby 1.9.3 (2013-02-22) [x86_64-darwin12.3.0]
[2013-05-16 15:05:59] INFO WEBrick::HTTPServer#start: pid=91029 port=3000
^C[2013-05-16 15:06:25] INFO going to shutdown ...
[2013-05-16 15:06:25] INFO WEBrick::HTTPServer#start done.
Exiting
Therefore the initialization order is as follows:
/config/boot.rb
/config/application.rb
/config.ru
/config/environment.rb
/config/environments/development.rb
/config/initializers/hello.rb
So if you want your environment variables loaded before config/environments/*.rb
(and before /config/initializers/*.rb
) then read this next.
Upvotes: 3
Reputation: 40277
I recommend using foreman and a .env
file to set your environment variables.
.env.sample
file that goes into source control .env
file, and add .env
to .gitignore
foreman start
rather than rails s
.env.sample
AWS_ACCESS_ID=YOUR_ACCESSKEY_GOES_HERE
ETC_ETC=ETC ETC ETC
Benefits:
Upvotes: 2