Question

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

Posted October 21, 2015 11.1k views
Ruby on Rails Ubuntu Security

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 https://www.digitalocean.com/community/tutorials/deploying-a-rails-app-on-ubuntu-14-04-with-capistrano-nginx-and-puma

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!

7 comments

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.

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.

Submit an Answer