У меня есть давнее Rails-приложение, которое работает на Ubuntu в другом облачном сервисе, но я перевожу его на AWS.
Развертывание Capistrano 3 зашло так далеко, но не удается установить гемы, требующие собственного построения, со следующей ошибкой (это один из примеров).
Я вставил полную ошибку внизу, но основной причиной ошибки является путь, используемый для вызова ruby,
sh: 1: //bin/ruby: not found
Те же самые гемы хорошо устанавливаются при локальной установке на сервер AWS.
Я исследовал и подтвердил, что при развертывании через ssh используется неинтерактивная оболочка, но я устанавливаю путь ruby, используя все три из .bashrc, / etc / environment и использую,
set :default_env, { "PATH" => "$PATH:/snap/bin" }
... но все равно нет радости.
Я подозреваю, что есть проблема с тем, как формируется путь для вызова ruby, поскольку // bin / ruby (с этой двойной косой чертой) синтаксически некорректен для оболочки bash.
Это как если бы переменная окружения, которая должна быть установлена и вставлена между этими слешами, определена как пустая строка (или просто не определена), но я проверил env vars для неинтерактивной оболочки против интерактивной оболочки, и все выглядит одинаково в интерактивных и неинтерактивных оболочках.
Я не использую rvm, поскольку мне это не нужно, и я бы не стал добавлять эту сложность, если она не является абсолютно необходимой (и я не думаю, что она должна быть).
Любые идеи о том, почему ruby вызывается с этим неверным путем?
Полная информация об ошибке, для контекста и ссылки,
An error occurred while installing mysql2 (0.3.21), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.21' --source 'https://rubygems.org/'`
succeeds before bundling.
In Gemfile:
mysql2
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory:
/home/rails/myrailsapp/deployonaws/shared/bundle/ruby/2.3.0/gems/therubyracer-0.12.3/ext/v8
//bin/ruby -r ./siteconf20190520-13147-dgcr4x.rb extconf.rb
sh: 1: //bin/ruby: not found
extconf failed, exit code 127