0

Have been working with Rails 5 and setting up everything through Vagrant. I have successfully been able to get my site working through Nginx and Webrick but when I try with Unicorn after doing the following command into vagrant ssh:

bundle exec unicorn -c config/unicorn.rb -D
chmod +x config/unicorn_init.sh
sudo ln -s /vagrant/config/unicorn_init.sh /etc/init.d/unicornNginx
bundle install --binstubs
sudo service unicorn restart

I get the following error:

Could not find rake-12.0.0 in any of the sources
Run `bundle install` to install missing gems.

When I check through bundle install or bundle info rake, it says that I have rake version 12.0.0:

vagrant@vagrant-ubuntu-trusty-64:/vagrant$ bundle info rake
  * rake (12.0.0)
    Summary: Rake is a Make-like program implemented in Ruby
    Homepage: https://github.com/ruby/rake
    Path: /home/vagrant/.rvm/gems/ruby-2.3.1@my_site/gems/rake-12.0.0

Here is my nginx.conf file:

upstream unicorn {
  server unix:/tmp/unicorn.mysiteNginx.sock fail_timeout=0;
}

server {
  listen 80 default deferred;
  # server_name projectname.com;
  root /vagrant/public;
  try_files $uri/home.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
  }

unicorn.rb file:

working_directory "/vagrant"
pid "/vagrant/tmp/pids/unicorn.pid"
stderr_path "/vagrant/log/unicorn.log"
stdout_path "/vagrant/log/unicorn.log"

listen "/tmp/unicorn.mysiteNginx.sock"
worker_processes 2
timeout 30

unicorn_init.sh file:

#!/bin/sh
set -e
# Example init script, this can be used with nginx, too,
# since nginx and unicorn accept the same signals

# Feel free to change any of the following variables for your app:
# Remember -E production flag for production & sudo -c "$CMD" - user so it's not run as root!
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/vagrant
PID=$APP_ROOT/tmp/pids/unicorn.pid
CMD="$APP_ROOT/bin/unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"
action="$1"
set -u

old_pid="$PID.oldbin"

cd $APP_ROOT || exit 1

sig () {
        test -s "$PID" && kill -$1 `cat $PID`
}

oldsig () {
        test -s $old_pid && kill -$1 `cat $old_pid`
}

case $action in
start)
        sig 0 && echo >&2 "Already running" && exit 0
        su -c "$CMD" - vagrant
        ;;
stop)
        sig QUIT && exit 0
        echo >&2 "Not running"
        ;;
force-stop)
        sig TERM && exit 0
        echo >&2 "Not running"
        ;;
restart|reload)
        sig HUP && echo reloaded OK && exit 0
        echo >&2 "Couldn't reload, starting '$CMD' instead"
        su -c "$CMD" - vagrant
        ;;
upgrade)
        if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
        then
                n=$TIMEOUT
                while test -s $old_pid && test $n -ge 0
                do
                        printf '.' && sleep 1 && n=$(( $n - 1 ))
                done
                echo

                if test $n -lt 0 && test -s $old_pid
                then
                        echo >&2 "$old_pid still exists after $TIMEOUT seconds"
                        exit 1
                fi
                exit 0
        fi
        echo >&2 "Couldn't upgrade, starting '$CMD' instead"
        su -c "$CMD" - vagrant
        ;;
reopen-logs)
        sig USR1
        ;;
*)
        echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
        exit 1
        ;;
esac

And GemFile:

source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

ruby "2.3.1"

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.2'
# Use sqlite3 as the database for Active Record
gem 'pg'
# WOW-Rails
gem 'wow-rails'
# Bootstrap
gem 'bootstrap-sass', '~> 3.3.6'
# Unicorn
gem 'unicorn'
# Rake
# gem 'rake', '~> 12.0.0'

group :production do
  gem 'rails_12factor'
end
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '~> 2.13'
  gem 'selenium-webdriver'
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Before submitting this question, I did some research on stack overflow and did some troubleshooting with similar question but no success so far. Any help would be appreciated!

w_lpz
  • 613
  • 4
  • 15
  • 28
  • A possible culprit is that you are manually running `bundle exec unicorn`, whereas `unicorn_init` is running `./bin/unicorn`. Double check that your binstubs make sense, and aren't referencing something funny? – Tom Lord Aug 07 '17 at 09:30
  • 1
    Possibly relevant: [This blog post](http://blog.kiskolabs.com/post/722322392/unicorn-init-scripts) which "cheats" by manually setting the `rvm ruby`, and [this documentation](https://rvm.io/deployment/init-d) for creating wrapper scripts. [Here is another](https://gist.github.com/killercup/2049606) workaround, and [this appears to be a more complete solution](https://gist.github.com/ndbroadbent/60e5323f513dffe98dd9). [Here's another](https://gist.github.com/mswart/3413790). And [here's a SO post about creating an rvm wrapper.](https://stackoverflow.com/a/3376785/1954610) – Tom Lord Aug 07 '17 at 09:43
  • Thanks! Going to check the links you provided. – w_lpz Aug 07 '17 at 10:00
  • You could also, of course, consider just not using `rvm` in production. I've found it useful in development at times, but always go with `rbenv` or `chruby` for production. – Tom Lord Aug 07 '17 at 14:45
  • So I continued using `.rvm` and created a wrapper following some of the links you gave me and it worked. Now I am have to deal why is it showing the apache2 ubuntu default page instead of the page I am building. Thanks! – w_lpz Aug 07 '17 at 19:26

0 Answers0