ruby-on-railsruby-on-rails-4rackunicornrackup

Why is Unicorn looking for rackup file (config.ru) even though I am specifying a config?


I am simply SSH'd into my Ubuntu 14.04 server instance, trying to bootstrap my Unicorn server for a Rails 4.2 app.

cd /home/sh0/app/current/api
bundle exec unicorn -E production -c /home/sh0/app/current/api/config/unicorn.rb

But it fails!

/usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/lib/unicorn/configurator.rb:657:in `parse_rackup_file': rackup file (config.ru) not readable (ArgumentError)
        from /usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/lib/unicorn/configurator.rb:77:in `reload'
        from /usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/lib/unicorn/configurator.rb:68:in `initialize'
        from /usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:100:in `new'
        from /usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/lib/unicorn/http_server.rb:100:in `initialize'
        from /usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/bin/unicorn:126:in `new'
        from /usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/bin/unicorn:126:in `<top (required)>'
        from /home/sh0/app/releases/20150514055558/api/bin/unicorn:16:in `load'
        from /home/sh0/app/releases/20150514055558/api/bin/unicorn:16:in `<main>'

So, why doesn't it find the dang config.ru file? It's right there, for local development purposes- If I just fire up Unicorn without the flags, it finds it fine, as if it were in development environment.

bundle exec unicorn

Normal (development, NOT production which is what I need in this environment) bootstrap OK:

I, [2015-05-14T06:00:44.081575 #5859]  INFO -- : listening on addr=0.0.0.0:8080 fd=9
I, [2015-05-14T06:00:44.081818 #5859]  INFO -- : worker=0 spawning...
I, [2015-05-14T06:00:44.082427 #5859]  INFO -- : master process ready
I, [2015-05-14T06:00:44.083162 #5862]  INFO -- : worker=0 spawned pid=5862
I, [2015-05-14T06:00:44.083380 #5862]  INFO -- : Refreshing Gem list
I, [2015-05-14T06:00:45.399105 #5862]  INFO -- : worker=0 ready

Okay, so now I will try doing something in between those two attempts.

On my remote server:

cd /home/sh0/app/current/api
unicorn -c config/unicorn.rb 

Notice the working_directory in this error message:

/usr/local/lib/ruby/gems/2.0.0/gems/unicorn-4.9.0/lib/unicorn/configurator.rb:539:in `working_directory': config_file=config/unicorn.rb would not be accessible in working_directory=/home/sh0/app/current (ArgumentError)

Solution

  • I have mis-configured my config/unicorn.rb.

    My Rails project is not at the base of my repository, and therefore I needed to update the working_directory specified by default in that file.

    The new configuration is:

    working_directory "/home/sh0/app/current/api"