SemiFixed: Missing `secret_key_base` for 'production' environment
What I did : On my production server, I create a config file (confthin.yml) for Thin (I'm using it) and add the following information :
environment: production
user: www-data
group: www-data
SECRET_KEY_BASE: mysecretkeyproduction
I then launch the app with
thin start -C /whereeveristhefieonprod/configthin.yml
Work like a charm and then no need to have the secret key on version control
Hope it could help, but I'm sure the same thing could be done with Unicorn and others.
Missing secret key base for production environment
Found out that /etc/environment is ignored by apache2. Add the following to /etc/apache2/envvars solved my problem:
export SECRET_KEY_BASE=<the long string>
How to solve error Missing `secret_key_base` for 'production' environment (Rails 4.1)
I had the same problem and solved it by creating an environment variable to be loaded every time I logged in to the production server, and made a mini-guide of the steps to configure it:
I was using Rails 4.1 with Unicorn v4.8.2 and when I tried to deploy my application it didn't start properly and in the unicorn.log
file I found this error message:
app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)
After some research I found out that Rails 4.1 changed the way to manage the secret_key
, so if you read the secrets.yml
file located at exampleRailsProject/config/secrets.yml
you'll find something like this:
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
This means that Rails recommends you to use an environment variable for the secret_key_base
in your production server. In order to solve this error you should follow these steps to create an environment variable for Linux (in my case Ubuntu) in your production server:
In the terminal of your production server execute:
$ RAILS_ENV=production rake secret
This returns a large string with letters and numbers. Copy that, which we will refer to that code as
GENERATED_CODE
.Login to your server
If you login as the root user, find this file and edit it:
$ vi /etc/profile
Go to the bottom of the file using Shift+G (capital "G") in vi.
Write your environment variable with the
GENERATED_CODE
, pressing i to insert in vi. Be sure to be in a new line at the end of the file:$ export SECRET_KEY_BASE=GENERATED_CODE
Save the changes and close the file using Esc and then "
:x
" and Enter for save and exit in vi.But if you login as normal user, let's call it "
example_user
" for this gist, you will need to find one of these other files:$ vi ~/.bash_profile
$ vi ~/.bash_login
$ vi ~/.profileThese files are in order of importance, which means that if you have the first file, then you wouldn't need to edit the others. If you found these two files in your directory
~/.bash_profile
and~/.profile
you only will have to write in the first one~/.bash_profile
, because Linux will read only this one and the other will be ignored.Then we go to the bottom of the file using Shift+G again and write the environment variable with our
GENERATED_CODE
using i again, and be sure add a new line at the end of the file:$ export SECRET_KEY_BASE=GENERATED_CODE
Having written the code, save the changes and close the file using Esc again and "
:x
" and Enter to save and exit.
You can verify that our environment variable is properly set in Linux with this command:
$ printenv | grep SECRET_KEY_BASE
or with:
$ echo $SECRET_KEY_BASE
When you execute this command, if everything went ok, it will show you the
GENERATED_CODE
from before. Finally with all the configuration done you should be able to deploy without problems your Rails application with Unicorn or some other tool.
When you close your shell and login again to the production server you will have this environment variable set and ready to use it.
And that's it! I hope this mini-guide helps you solve this error.
Disclaimer: I'm not a Linux or Rails guru, so if you find something wrong or any error I will be glad to fix it.
Can I generate Rails SECRET_KEY_BASE without Ruby?
OK, I found out - using OpenSSL:
openssl rand -hex 64
Related Topics
How to Convert a Nested Hash into Xml Using Nokogiri
Thread Safe Enumerator in Ruby
Rails 4 Devise 3.1.1 Actioncontroller::Unknownformat in Devise::Registrationscontroller#New
How to Use a Named Scope in My Model Against an Array of Items
What Is the Most Ruby-Ish Way of Accessing Nested Hash Values at Arbitrary Depths
How to Show Error Message on Rails Views
How to Handle Utf-8 Email Headers (Like Subject:) Using Ruby
Get an Array from a Rails Form
Recovering from a Broken Tcp Socket in Ruby When in Gets()
Open-Uri Returning Ascii-8Bit from Webpage Encoded in Iso-8859
Wicked_Pdf: Footer Height/Styling
How to Input Multibyte Characters in Rails Console (Or Irb)
Use Rspec's "Expect" etc. Outside a Describe ... It Block
Exception_Notification for Delayed_Job
Problems Keeping an Object in an Array, Ruby Issues and Rails Issues