How to set up environment variables on Ubuntu 14, Nginx, Capistrano and Rails?

Posted October 21, 2015 14.2k views
Ruby on RailsUbuntuSecurity

this is driving me crazy for a few days now and I can’t figure out how to solve this. I am new to this so it might just be something very simple.

I set up my VPS hosting on Ubuntu 14.04 using Digital Ocean to deploy my Rails 4 app to a production environment. I deployed my app using Capistrano and Nginx by following this tutorial

The only problem that I currently have is that my environment variables are not loaded by my app. Or at least, when I try to subscribe to my newsletter, it tells me that a valid api key is required.

What I did so far:

  • Installed rbenv-var as instructed in the documentation.
  • Created a .rbenv-var file in my /appname/current folder
  • When I run rbenv vars, everything looks OK
  • ran source ~/.bash_profile (found this somewhere that could solve the problem, but it didnt)
  • Tried “spring stop” as indicated somewhere but didn’t work either. Spring was not installed
  • I also tried adding my variables to my ~/.bashrc file, that didn’t work either
  • Tried adding them to my ~/.bashprofile file, ran source ~/.bashprofile but that didn’t work either.

This is my bash_profile file:

[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM$
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"
export MAILCHIMP_API_KEY="somenumber"
export MAILCHIMP_LIST_ID="somenumber"

Happy to add any extra code if required.

Thanks a lot!


These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Submit an Answer
2 answers

I’m also new to this kind of thing so forgive me if this is the n00b way to do it:

  • I put all my environment variables in etc/environment like so:
    export SOME_ENV_VAR=some_value
  • You have to log out and back into your Ubuntu user account for the vars to become usable.
  • If Capistrano needs the vars before the task is run, in your deploy.rb use:
    set :default_env, { 'SOME_ENV_VAR' => 'some_value' }

took a while to figure out.. Put the variable to /etc/default/unicorn.