Не удается запустить /etc/profile.d/chruby.sh при развертывании с использованием Capistrano в Rails

Я пытался развернуть мое приложение rails на экземпляре EC2. Шаги, которые я уже предпринял,

Локально:

  1. Я установил все драгоценные камни, написав в 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
    
  2. Я отредактировал мой 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 }
    
  3. Я сделал необходимые изменения в config/deploy.rb а также специально

    set :chruby_ruby, 'ruby-2.3.0'
    

На сервере / экземпляре:

  1. Установлен Рубин
  2. Установлен Chruby и включен в /etc/profile.d/chruby.sh эти:

    source xx/xx/xx/chruby.sh
    source xx/xx/xx/auto.sh
    
  3. Сделал папку для приложения, а также создал 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

Я согласен с тире

но у меня есть еще один сценарий

  1. добавление shebang в chruby-exec

  2. export SHELL=/bin/bash

в исходном коде chruby-exec на github

последняя строка

exec "$SHELL" "${shell_opts[@]}" -c "$command"

поэтому переменная среды SHELL играет здесь важную роль.

@alchemist95, пожалуйста, проверьте первую строку chruby-exec

Похоже, у вас более старая версия chruby-exec в качестве этой фиксации. Убедитесь, что chruby-exec работает под bash. добавлен в 2013 году.

Другие вопросы по тегам