RVM, Capistrano и несколько Ruby версий

Опубликовал Максим Баев, 02 августа 2019, 02:29

Записка о том, что бывает, когда на сервере находится несколько ruby-приложений, использующих разные версии ruby и если эти приложения деплоятся через Capistrano. Иногда можно получить что-то вроде этого :

Your Ruby version is 2.5.1, but your Gemfile specified 2.6.3

И это несмотря на то, что rvm нашёл файл, в котором указана версия ruby, которую надо использовать и она установлена на сервере:

$ rvm list

rvm rubies

   ruby-2.4.4 [ x86_64 ]
 * ruby-2.5.1 [ x86_64 ]
=> ruby-2.6.3 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

Причины

Дело в том, что то самое расширение capistrano-rvm не парится и просто использует дефолтную версию.

set :rvm_ruby_version, "default"

Решение

Нужно прописать в ваш config/deploy.rb:

set :rvm_ruby_version, '.'

и это будет указание для rvm использовать ту версию, которая указана в файле .ruby-version. Соответственно, при выполнении команд, нужно находиться в папке, где есть этот .ruby-version, обычно это корневая директория проекта. Capistrano по-умолчанию делает именно так, поэтому ничего дополнительно делать не нужно.

Результат

00:25 bundler:install
      01 ~/.rvm/bin/rvm . do bundle install --path /var/www/mysite/shared/bundle --jobs 4 --without development test --deployment --quiet
    ✔ 01 deployer@mysite.com 2.197s

Другие посты