bundlerのバージョンによるシェルスクリプトの実行方法の違い

bundlerのバージョンによってシェルスクリプト(shoryuken gem内の/bin/shoryuken)の起動方法が若干違っていてハマったのでメモしておきます。

bundle exec shoryuken -R -C /home/app/production/current/config/shoryuken/production.yml -d -L /home/app/production/current/log/shoryuken.log

で起動すると

1.16.2

/home/app/production/shared/vendor/bundle/ruby/2.2.0/bin/shoryuken -R -C /home/app/production/current/config/shoryuken/production.yml -d -L /home/app/production/current/log/shoryuken.log

1.10.6

ruby /home/app/production/shared/vendor/bundle/ruby/2.2.0/bin/shoryuken -R -C /home/app/production/current/config/shoryuken/production.yml -d -L /home/app/production/current/log/shoryuken.log

bundlerのバージョンによってrubyのプロセスとして起動するかどうかの違いがあるようです。

これが原因で、nagiosでcheck_procsを使ってプロセス監視をしていたところ、プロセスがrubyではなくなったのでPROCS CRITICALが出てしまっていました。

shoryukenのスクリプト

#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'shoryuken' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end

gem 'shoryuken', version
load Gem.bin_path('shoryuken', 'shoryuken', version)