Skip to content

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

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

text
Your Ruby version is 2.5.1, but your Gemfile specified 2.6.3

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

bash
$ 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 не парится и просто использует дефолтную версию:

ruby
set :rvm_ruby_version, "default"

Решение

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

ruby
set :rvm_ruby_version, '.'

Это будет указание для rvm использовать ту версию, которая указана в файле .ruby-version.

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

Результат

text
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