RVM, Capistrano и несколько Ruby версий
Записка о том, что бывает, когда на сервере находится несколько 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