Развернутый Chef сервер Puma с рабочим Sidekiq завершается с ошибкой неправильной версии ruby

Служба puma/runit этого приложения rails работала до тех пор, пока я не попытался развернуть гем Sidekiq 3.5.3 с моим приложением через шеф-повара.

В моем рецепте я установил 2.0.0p576 через рецепт ruby_build

which ruby  #gives me /usr/bin/ruby
/usr/bin/ruby -v #return 2.0.0p576

шаблоны/по умолчанию/sv-myapp-run.erb

echo "$(ruby -e 'print RUBY_VERSION')" >> check_ruby.txt #returns 2.0.0
exec chpst -u root:root bundle exec puma --config config/puma.rb

В журнале службы runit я получаю это сообщение ниже

2015-11-04_06:23:50.99541 /var/lib/gems/1.9.1/gems/sidekiq-3.5.3/lib/sidekiq.rb:3:in `<top (required)>': Sidekiq 3.5.3 does not support Ruby 1.9. (RuntimeError)

Поскольку это не происходит локально, я решил, что это как-то связано с Chef и с тем, как я устанавливаю Ruby на хосте.

Я также пытался установить rvm , очистить систему ruby ​​​​и подтвердить значение по умолчанию (глобальное и локальное) как> 2.0 - ничего из этого пока не изменило.

Я заметил, что в /usr/local/bin/puma объявление

#!/usr/bin/env ruby1.9.1

Я отредактировал это, чтобы он был рубиновым, затем перезапустил службу, но без изменений. Есть ли способ заставить Puma работать под ruby ​​​​+> 2.0?

ruby_build_ruby '2.0.0-p576'

link "/usr/bin/ruby" do
  to "/usr/local/ruby/2.0.0-p576/bin/ruby"
end



gem_package 'bundler' do
  options '--no-ri --no-rdoc'
end

include_recipe "runit"

deploy_revision("/opt/deploy") do
  revision "develop"
  repository "removed" 
  user "root"
  action :deploy
  shallow_clone true
  keep_releases 3
  rollback_on_error true  # remove release if callbacks failed
  migrate true
  migration_command "rake db:migrate"
  before_migrate do
    execute "bundle install" do
      command "bundle install"
      cwd  "#{release_path}"
      user "root" 
    end
  end
  #restart_command "rails server -b 0.0.0.0"
  # disable default behavior
  symlink_before_migrate.clear
  create_dirs_before_symlink.clear
  purge_before_symlink.clear
  symlinks.clear
end

Ubuntu 14.04, сборщик 1.10.6

Спасибо!


person MikeW    schedule 07.11.2015    source источник


Ответы (1)


Я не думаю, что Ruby, который вы установили, является системой по умолчанию (или, по крайней мере, не тогда, когда Chef выполняет пакет). Я основываюсь на /var/lib/gems/1.9.1/gems/sidekiq-3.5.3, что, похоже, указывает на то, что вы также установили драгоценный камень в версии 1.9.1.

Я не знаю, предпочитаете ли вы rvm или rbenv, но у каждого из них есть популярная кулинарная книга сообщества, которая может установить системный ruby ​​по умолчанию на тот, который вы хотите использовать, или даже только для определенного пользователя (поскольку вы используете root, я бы сказал, просто установите системный рубин как тот, который вы хотите).

Если бы вы использовали поваренную книгу rbenv, это выглядело бы так:

include_recipe 'ruby_build'
include_recipe 'ruby_rbenv'
rbenv_global '2.0.0p576'

Вы также сможете опустить эти ресурсы, которые вы использовали раньше:

ruby_build_ruby '2.0.0-p576'
link "/usr/bin/ruby" do
  to "/usr/local/ruby/2.0.0-p576/bin/ruby"
end

Кроме того, я бы порекомендовал работать под другим пользователем, а не root, чтобы вы могли сломать рубин по умолчанию только для этого пользователя, а не рубин всей системы. Ваше здоровье!

person Martin    schedule 07.11.2015
comment
Спасибо, Мартин, мне потребовалось несколько дней, чтобы попробовать это. В конце концов, похоже, разница между использованием ресурса шеф-повара gem_package и использованием ресурса bash для установки сборщика - когда я переключился на сборщик через bash, все пошло хорошо. - person MikeW; 10.11.2015