How can I use unicorn as "rails s"?

Ruby on-RailsRubyUnicorn

Ruby on-Rails Problem Overview


A new Rails project's Gemfile shows:

# Use unicorn as the app server
gem 'unicorn'

rails s --help shows:

Usage: rails server [mongrel, thin, etc] [options]

Yet, doing:

rails s unicorn

I get:

/Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/rack-1.4.5/lib/rack/handler.rb:63:in `require': cannot load such file -- rack/handler/unicorn (LoadError)
from /Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/rack-1.4.5/lib/rack/handler.rb:63:in `try_require'
from /Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/rack-1.4.5/lib/rack/handler.rb:16:in `get'
from /Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/rack-1.4.5/lib/rack/server.rb:272:in `server'
from /Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/railties-3.2.13/lib/rails/commands/server.rb:59:in `start'
from /Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/railties-3.2.13/lib/rails/commands.rb:55:in `block in <top (required)>'
from /Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/railties-3.2.13/lib/rails/commands.rb:50:in `tap'
from /Users/patrick/.rvm/gems/ruby-1.9.3-head@keynote/gems/railties-3.2.13/lib/rails/commands.rb:50:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

I've used unicorn in the past on other projects, but always had to run the unicorn command and specify a config file which is a bit of a pain. I am wondering how I can just simply make it work by using rails s...

Is this possible?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

It looks like the unicorn-rails gem that @Dogbert mentioned can actually be used to make Unicorn the rails server handler.

Simply include gem "unicorn-rails" (and for Rails 4.2.4, gem "rack-handlers") in your Gemfile, run bundle install to install the gem, then you can run:

$ rails server unicorn

Although once unicorn-rails is installed, Unicorn should be the default app server so you could also just run rails server and it should use Unicorn (assuming you don't also have Thin or Mongrel in your Gemfile, in which case they may conflict and you might want to remove the ones you're not using).

Solution 2 - Ruby on-Rails

A better option might just be to run the unicorn server directly.

bundle exec unicorn -p 3000 # default port is 8080

Solution 3 - Ruby on-Rails

gem 'rack-handlers'

rails server unicorn

Solution 4 - Ruby on-Rails

However the answer by Steven is the simplest way to do.

I run unicorn on development environment via a rake task:

lib/tasks/dev_unicorn.rake:

task :server do
  # optional port parameter
  port = ENV['PORT'] ? ENV['PORT'] : '3000'
  puts 'start unicorn development'
  # execute unicorn command specifically in development
  # port at 3000 if unspecified
  sh "cd #{Rails.root} && RAILS_ENV=development unicorn -p #{port}"
end
# an alias task
task :s => :server

run:

rake s

Reference http://jing.io

Solution 5 - Ruby on-Rails

I don't think it is possible to use unicorn as 'rails s'. Use this -

Add gem 'unicorn' to gem file and run bundle install.

and then run any of the following commands -

$ unicorn -p 3000

or

$ unicorn_rails -p 3000

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
QuestionpatrickView Question on Stackoverflow
Solution 1 - Ruby on-RailsStuart MView Answer on Stackoverflow
Solution 2 - Ruby on-RailsSteven SorokaView Answer on Stackoverflow
Solution 3 - Ruby on-RailsTom MaeckelbergheView Answer on Stackoverflow
Solution 4 - Ruby on-RailstokhiView Answer on Stackoverflow
Solution 5 - Ruby on-RailsprashantView Answer on Stackoverflow