AWS OpsWorks Environment variables not working
aws-opsworks, ruby-on-rails
Solution
OpsWorks stores environmental variables in different places depending on what kind of app you're deploying. On Rails / Passenger they should be saved in the Apache config file `#{your_app_name}.conf`. (Source)
This means they aren't available in your normal shell environment.
I know the Node.js recipes stored everything in an `/srv/www/#{app_name}/shared/app.env` file... which is then sourced to pull in the environment to run the Node server. This implementation detail also meant you could write shell scripts that sourced that `app.env` file, then called some Node script or whatever.
Of course, Rails isn't Node. I have no idea if the environmental variables are also stored somewhere else or not: a quick look at the Rails recipes in the OpsWorks cookbooks didn't find anything obvious, but maybe I missed something.
Depending on the amount of modifications you have going on in your OpsWorks cookbook, you could create a deploy recipe that does something like this:
`application_environment_file do user deploy[:user] group deploy[:group] path ::File.join(deploy[:deploy_to], "shared") environment_variables deploy[:environment_variables] end `
(maybe adjusting the path)
Then to run your console, when you're SSHed into the server, do something like
`sudo source /srv/www/my_app_name/shared/app.env; bundle exec rails console -e production` or whatever.
Problem
I am running Ubuntu 14.04 LTS 64 bit Rails Application and I am unable to access my App environment variables. In OpsWorks App panel, I set my environment variables, say: ``` MYKEY: 1234 ``` Then I save and deploy my app again to make these visible. In my Rails app, or the rails console I get nil: ``` $ bundle exec rails c production >ENV["MYKEY"] => nil ``` I have tried restarting the server. I'm not sure what I am missing, I have been using environment variables in other services. How can I trace where these should be set?