Не удается запустить /etc/profile.d/chruby.sh при развертывании с использованием Capistrano в Rails
Я пытался развернуть мое приложение rails на экземпляре EC2. Шаги, которые я уже предпринял,
Локально:
Я установил все драгоценные камни, написав в
Gemfile
а такжеbundle install
:group :development do gem 'capistrano' gem 'capistrano3-puma' gem 'capistrano-rails', require: false gem 'capistrano-bundler', require: false gem 'capistrano-chruby' end
Я отредактировал мой
Capfile
требовать модулиrequire "capistrano/setup" require "capistrano/deploy" require "capistrano/scm/git" install_plugin Capistrano::SCM::Git require "capistrano/chruby" require "capistrano/bundler" require "capistrano/rails/assets" require "capistrano/rails/migrations" require "capistrano/puma" Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
Я сделал необходимые изменения в
config/deploy.rb
а также специальноset :chruby_ruby, 'ruby-2.3.0'
На сервере / экземпляре:
- Установлен Рубин
Установлен Chruby и включен в
/etc/profile.d/chruby.sh
эти:source xx/xx/xx/chruby.sh source xx/xx/xx/auto.sh
Сделал папку для приложения, а также создал
database.yml
а такжеapplication.yml
,
Сделав все это, когда я бегу cap production deploy
, он начинает нормально с проверки и клонирования git и связывания файлов и каталогов, но не работает bundler:install
выдаёт ошибку вроде
01 /usr/local/bin/chruby-exec ruby-2.3.0 -- bundle install --path /home/deploy…
01 /bin/sh: 2: /etc/profile.d/chruby.sh:
01 source: not found
01
01 /bin/sh: 3: /etc/profile.d/chruby.sh:
01 source: not found
01
01 /bin/sh: 1:
01 chruby: not found
01
Поскольку есть только примеры развертывания Rails на AWS с использованием RVM или JRuby, я не могу понять, в чем я ошибаюсь.
0 ответов
На первый взгляд проблема связана с файлом / bin / sh, который не поддерживает исходный код.
При использовании 'bash' источником являются псевдонимы для '.' команда. Непонятно, какой по умолчанию / bin / sh установлен в вашей системе. Если это /bin/dash (Mint 19) - вам придется заменить каждый источник на. '
. xx/xx/xx/chruby.sh
. xx/xx/xx/auto.sh
Возможно, вам придется внести аналогичные исправления в файлы, на которые есть ссылки (/etc/profile.d/*.sh), которые могут использовать "исходный код".
Обновление 1 Предполагая, что '/ bin / ls' - это тире (черт возьми,readlink -f /bin/sh
, будет отображаться / bin / dash или другая программа *sh). При использовании 'тире' можно настроитьalias
в / etc / profile, после проверки, работает ли он под тире. Теоретически это позволит скриптам, использующим "исходный код", работать без изменений.
case "$(readlink -f /proc/$$/exe)" in
*/dash) alias source=. ;;
esac
Я согласен с тире
но у меня есть еще один сценарий
добавление shebang в chruby-exec
export SHELL=/bin/bash
в исходном коде chruby-exec на github
последняя строка
exec "$SHELL" "${shell_opts[@]}" -c "$command"
поэтому переменная среды SHELL
играет здесь важную роль.
@alchemist95, пожалуйста, проверьте первую строку chruby-exec
Похоже, у вас более старая версия chruby-exec в качестве этой фиксации. Убедитесь, что chruby-exec работает под bash. добавлен в 2013 году.