Неверный путь Ruby '// bin / ruby' во время установки Capistrano Bundle - PullRequest
0 голосов
/ 20 мая 2019

У меня есть давнее 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

1 Ответ

1 голос
/ 24 мая 2019

ОК, я понял, что происходит.

После 34 лет использования Unix я узнал, что «//» является допустимым синтаксисом пути, поэтому это была красная сельдь.

Проблема действительно заключалась в том, что исполняемый файл ruby ​​отсутствовал в // usr / bin

Я экспериментировал со ссылками с фактического пути, по которому был найден ruby, но это только затронуло другие проблемы с версиями ruby ​​(этот старый каштан).

Возможное исправление - начать заново со свежего экземпляра Ubuntu и установить ruby, используя

sudo apt install ruby-full

... а не ...

sudo snap install ruby --classic --channel=2.3/stable

... что я использовал ранее.

Используя apt install, поместите ruby ​​в / usr / bin, и с миром все снова будет в порядке.

Спасибо.

...