Change a Rails application to production
This would now be
rails server -e production
Or, more compact
rails s -e production
It works for rails 3+ projects.
How to setup and run a Rails 4 app in Production mode (step-by-step) using Apache and Phusion Passenger:
Normally you would be able to enter your Rails project, rails s
, and get a development version of your app at http://something.com:3000. Production mode is a little trickier to configure.
I've been messing around with this for a while, so I figured I'd write this up for the newbies (such as myself). There are a few little tweaks which are spread throughout the internet and figured this might be easier.
Refer to this guide for core setup of the server (CentOS 6, but it should apply to nearly all Linux flavors): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4-app-with-apache-and-passenger-on-centos-6
Make absolute certain that after Passenger is set up you've edited the
/etc/httpd/conf/httpd.conf
file to reflect your directory structure. You want to point DocumentRoot to your Rails project /public folder Anywhere in thehttpd.conf
file that has this sort of dir:/var/www/html/your_application/public
needs to be updated or everything will get very frustrating. I cannot stress this enough.Reboot the server (or Apache at the very least -
service httpd restart
)Enter your Rails project folder
/var/www/html/your_application
and start the migration withrake db:migrate
. Make certain that a database table exists, even if you plan on adding tables later (this is also part of step 1).RAILS_ENV=production rake secret
- this will create a secret_key that you can add toconfig/secrets.yml
. You can copy/paste this into config/secrets.yml for the sake of getting things running, although I'd recommend you don't do this. Personally, I do this step to make sure everything else is working, then change it back and source it later.RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
if you are serving static assets. This will push js, css, image files into the/public
folder.RAILS_ENV=production rails s
At this point your app should be available at http://something.com/whatever
instead of :3000
. If not, passenger-memory-stats
and see if there an entry like 908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname
I've probably missed something heinous, but this has worked for me in the past.