Search code examples
ruby-on-rails-4environment-variablesubuntu-14.04rbenv

Environment variables not loaded on Ubuntu 14.04 VPS Rails


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 ~/.bash_profile file, ran source ~/.bash_profile 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!


Solution

  • Had the same problem, everything you mentioned above. Here's what I did:

    In ~/.profile on your ubuntu box make sure you are loading both .bashrc && .bash_profile

    # if running bash
    if [ -n "$BASH_VERSION" ]; then
      # include .bashrc if it exists
      if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
      fi
      if [-f "$HOME/.bash_profile" ]; then
        . "$HOME/.bash_profile"
      fi
    fi
    

    Then, make sure your environment variables are exported from your .bash_profile.

    # .bash_profile
    export KEY=value
    etc.
    

    Restart your server (in my case, I was running nginx, so sudo service nginx restart), then restart your app (touch app/current/tmp/restart.txt).

    Your app should have access to the env variables now.