Change a Rails application to production

Ruby on-RailsDevelopment EnvironmentProduction Environment

Ruby on-Rails Problem Overview


How can I change my Rails application to run in production mode? Is there a config file, environment.rb for example, to do that?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

This would now be

rails server -e production

Or, more compact

rails s -e production

It works for rails 3+ projects.

Solution 2 - Ruby on-Rails

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.

  1. 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

  2. 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 the httpd.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.

  3. Reboot the server (or Apache at the very least - service httpd restart )

  4. Enter your Rails project folder /var/www/html/your_application and start the migration with rake db:migrate. Make certain that a database table exists, even if you plan on adding tables later (this is also part of step 1).

  5. RAILS_ENV=production rake secret - this will create a secret_key that you can add to config/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.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile if you are serving static assets. This will push js, css, image files into the /public folder.

  8. 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.

Solution 3 - Ruby on-Rails

If you're running on Passenger, then the default is to run in production, in your apache conf:

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

If you're just running a local server with mongrel or webrick, you can do:

./script/server -e production

or in bash:

RAILS_ENV=production ./script/server

actually overriding the RAILS_ENV constant in the enviornment.rb should probably be your last resort, as it's probably not going to stay set (see another answer I gave on that)

Solution 4 - Ruby on-Rails

If mipadi's suggestion doesn't work, add this to config/environment.rb

# force Rails into production mode when                          
# you don't control web/app server and can't set it the proper way                  
ENV['RAILS_ENV'] ||= 'production'

Solution 5 - Ruby on-Rails

Change the environment variable RAILS_ENV to production.

Solution 6 - Ruby on-Rails

$> export RAILS_ENV=production

Solution 7 - Ruby on-Rails

You can also pass the environment to script/server:

$ script/server -e production

Solution 8 - Ruby on-Rails

rails s -e production

This will run the server with RAILS_ENV = 'production'.

Apart from this you have to set the assets path in production.rb

config.serve_static_assets = true

Without this your assets will not be loaded.

Solution 9 - Ruby on-Rails

RAILS_ENV=production rails s

OR

rails s -e production

By default environment is developement.

Solution 10 - Ruby on-Rails

As others have posted: rails server -e production

Or, my personal fave: RAILS_ENV=production rails s

Solution 11 - Ruby on-Rails

In Rails 3

Adding Rails.env = ActiveSupport::StringInquirer.new('production') into the application.rb and rails s will work same as rails server -e production

module BlacklistAdmin
  class Application < Rails::Application
    
    config.encoding = "utf-8"
    Rails.env = ActiveSupport::StringInquirer.new('production')

    config.filter_parameters += [:password]
  end
end

Solution 12 - Ruby on-Rails

It is not a good way to run rails server in production environment by "rails server -e production", because then rails runs as a single-threaded application, and can only respond to one HTTP request at a time.

The best article about production environment for rails is http://ofps.oreilly.com/titles/9780596521424/production_id35801033.html" title="Production Environments - Rails 3 in a Nutshell - OFPS - O'Reilly Media">Production Environments - Rails 3

Solution 13 - Ruby on-Rails

for default server : rails s -e production

for costum server port : rails s -p [port] -e production, eg. rails s -p 3002 -e production

Solution 14 - Ruby on-Rails

By default server runs on development environment: $ rails s

If you're running on production environment: $ rails s -e production or $ RAILS_ENV=production rails s

Solution 15 - Ruby on-Rails

Please make sure you have done below in your environment.rb file.

> ENV['RAILS_ENV'] ||= 'production'

If you application runs in shared hosting environment or phushion passenger, you might need to need make changes in .httaccess (inside public folder) and set mode as production.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAdler MedradoView Question on Stackoverflow
Solution 1 - Ruby on-RailsBandsOnABudgetView Answer on Stackoverflow
Solution 2 - Ruby on-RailsetusmView Answer on Stackoverflow
Solution 3 - Ruby on-RailsDan McNevinView Answer on Stackoverflow
Solution 4 - Ruby on-RailsPeteView Answer on Stackoverflow
Solution 5 - Ruby on-RailsmipadiView Answer on Stackoverflow
Solution 6 - Ruby on-RailsEvolveView Answer on Stackoverflow
Solution 7 - Ruby on-RailsfozView Answer on Stackoverflow
Solution 8 - Ruby on-RailsPrasannaView Answer on Stackoverflow
Solution 9 - Ruby on-Railspuneet18View Answer on Stackoverflow
Solution 10 - Ruby on-Railsalex1szView Answer on Stackoverflow
Solution 11 - Ruby on-RailsRSKView Answer on Stackoverflow
Solution 12 - Ruby on-RailsEvgeny LiskovetsView Answer on Stackoverflow
Solution 13 - Ruby on-Railsuser3786185View Answer on Stackoverflow
Solution 14 - Ruby on-RailsPankaj DhoteView Answer on Stackoverflow
Solution 15 - Ruby on-RailsRakeshView Answer on Stackoverflow