Reputation: 683
I am trying to move a Rails application into production but I am having a problem with Rails not seeing my environment variable.
I have the password for my database setup in my .bashrc file like
export APP_NAME_DATABASE_PASSWORD=secretkey
In irb
ENV["APP_NAME_DATABASE_PASSWORD"]
returns secretkey
.
Using
RAILS_ENV=production rails c
and just
rails c
returns secretkey
but when starting the application I get
Access is denied (using password: NO)
I am using a slightly modified version of the init script on "How To Deploy a Rails App with Unicorn and Nginx on Ubuntu 14.04" to start unicorn.
It is being hosted on Ubuntu Server 14.04.
Upvotes: 11
Views: 23426
Reputation: 81
For the ones using zsh:
echo 'export APP_NAME_DATABASE_PASSWORD=value' >> ~/.zshenv
source ~/.zshenv
Check if it has really been set using:
echo $APP_NAME_DATABASE_PASSWORD # value
For running rails applications you might also want to do spring stop
.
Upvotes: 2
Reputation: 469
Try doing spring stop
followed by rails c
Spring is a rails application preloader that loads the ENV configuration. It might not have loaded the .bashrc
changes in your case.
Upvotes: 24
Reputation: 8257
Here is another option:
http://railsguides.net/how-to-define-environment-variables-in-rails/
Put your environment variables in local_env.yml
, and then put this in application.rb
config.before_configuration do
env_file = File.join(Rails.root, 'config', 'local_env.yml')
YAML.load(File.open(env_file)).each do |key, value|
ENV[key.to_s] = value.to_s
end if File.exists?(env_file)
end
Upvotes: 2
Reputation: 179
I had a similar problem. A simple solution for you would be to run:
export RAILS_ENV=production && rails c
The reason is that when you do not use the export, the rails can not see the environment variable but you see its value when you execute echo
on the console.
Upvotes: 4
Reputation: 11235
export APP_NAME_DATABASE_PASSWORD=secretkey
is most likely scoping your environment variable to a bash process. Since Unicorn doesn't run as a child of bash process, it doesn't have access to this environment variable.
I'd recommend storing your ENV vars in a single place, such as application.yml
and loading them into your ruby environment at the start of your application. There are some great tools that do this. I'd recommend looking into Figaro: https://github.com/laserlemon/figaro.
Here's another post relevant to your question: Re-source .bashrc when restarting unicorn?
Upvotes: 9