Укажите версию Bundler для использования в Capistrano - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Capistrano для развертывания приложения Sinatra в хостинговой компании (https://railsplayground.com/).

Хостинговая компания поддерживает 3 версии Ruby:

$ ruby -v
ruby 2.0.0p645 (2015-04-13 revision 50299) [x86_64-linux]

$ /usr/local/bin/ruby224 -v
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux]

$ /usr/local/bin/ruby233 -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]

Поскольку Sinatra 2.0.3 требует Ruby> = 2.2.0 , я решил использовать Ruby 2.3.3. Хостинг-компания создала соответствующие исполняемые файлы:

$ /usr/local/bin/ruby233 /usr/local/bin/gem233 -v
2.5.2

$ /usr/local/bin/ruby233 /usr/local/bin/bundle233 -v
Bundler version 1.14.4

Чтобы протестировать процесс установки Gem, я создал папку с Gemfile:

$ cat Gemfile
source 'http://rubygems.org'
gem 'sinatra'

Я запустил упаковщик ($ /usr/local/bin/ruby233 /usr/local/bin/bundle233 install --path=vendor/bundle), и гемы были установлены в директорию vendor/bundle приложения:

$ ll vendor/bundle/ruby/2.3.0/gems/
total 28
drwxrwxr-x 7 foobar foobar 4096 Sep 10 06:35 ./
drwxrwxr-x 9 foobar foobar 4096 Sep 10 06:35 ../
drwxrwxr-x 5 foobar foobar 4096 Sep 10 06:35 mustermann-1.0.3/
drwxrwxr-x 7 foobar foobar 4096 Sep 10 06:35 rack-2.0.5/
drwxrwxr-x 3 foobar foobar 4096 Sep 10 06:35 rack-protection-2.0.3/
drwxrwxr-x 4 foobar foobar 4096 Sep 10 06:35 sinatra-2.0.3/
drwxrwxr-x 7 foobar foobar 4096 Sep 10 06:35 tilt-2.0.8/

Затем я создал простое приложение Sinatra и попытался развернуть его.

Gemfile:

source "http://rubygems.org"

gem "sinatra"

group :development do
    # deployment
    gem 'capistrano'
    gem 'capistrano-bundler'
    gem 'capistrano-passenger'
end

config.ru

require 'bundler'
Bundler.setup

# desired
#/usr/local/bin/ruby233 /usr/local/bin/bundle233 install --path=vendor/bundle

require File.join(File.dirname(__FILE__), 'app')
run Sinatra::Application

deploy.rb

set :git_user, 'foobar'
set :application, "cap"
set :repo_url, "git@bitbucket.org:#{fetch(:git_user)}/#{fetch(:application)}.git"
set :branch, 'master'
set :passenger_restart_with_touch, true

staging.rb

set :stage, :staging
set :ssh_user, 'foobarbaz'
set :use_sudo, false
server "supersonic.webhostserver.biz", user: fetch(:ssh_user), roles: %w{app, web, db}
set :tmp_dir, "/home/#{fetch(:ssh_user)}/tmp"
set :deploy_to, "/home/#{fetch(:ssh_user)}/apps/#{fetch(:application)}"

Я запустил промежуточное развертывание (с рабочей станции):

$ bundle exec cap staging deploy

Когда скрипт пытается установить Gems, он терпит неудачу:

00:14 bundler:install
      01 bundle install --path /home/foobarbaz/apps/cap/shared/bundle --without development test --deployment --quiet
      01 stdin: is not a tty
      01 An error occurred while installing mustermann (1.0.3), and Bundler cannot
      01 continue.
      01 Make sure that `gem install mustermann -v '1.0.3'` succeeds before bundling.
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as foobarbaz@supersonic.webhostserver.biz: bundle exit status: 5
bundle stdout: An error occurred while installing mustermann (1.0.3), and Bundler cannot
continue.
Make sure that `gem install mustermann -v '1.0.3'` succeeds before bundling.
bundle stderr: stdin: is not a tty

Сбой, потому что mustermann требует Ruby> = 2.2.0, но скрипт пытается установить Gem, используя Ruby 2.0 (по умолчанию).

Как мне заставить capistrano (версия 3.11.0 на моей рабочей станции) использовать на сервере нужную версию bundler (bundle233)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...