Мой сценарий оболочки для запуска моего приложения rails, похоже, не запускает код, который должен запускать `cd`? - PullRequest
0 голосов
/ 07 ноября 2019

Я написал скрипт для запуска моего приложения rails. Он включает в себя множество сервисов, поэтому я хочу использовать этот скрипт всякий раз, когда перезагружаю свой компьютер.

Сценарий довольно прост, он использует cd <some-folder> и затем запускает определенную там службу. Например, я запускаю druid следующим образом:

cd ~/apache-druid-0.16.0-incubating
./bin/start-micro-quickstart 1>~/log/druid.log 2>&1 &
sleep 10

Сон несколько произвольный, но я знаю, что этого достаточно.

Когда я хочу запустить службу rails, она терпит неудачу.

cd ~/my-app
rails s &

Журналы показывают эту ошибку:

/home/alexis/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/bundler/definition.rb:495:in `validate_ruby!': Your Ruby version is 2.6.3, but your Gemfile specified 2.5.3 (Bundler::RubyVersionMismatch)
        from /home/alexis/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/bundler/definition.rb:470:in `validate_runtime!'
        from /home/alexis/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/bundler.rb:101:in `setup'
        from /home/alexis/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/bundler/setup.rb:20:in `<top (required)>'
        from /home/alexis/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /home/alexis/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from bin/rails:3:in `require_relative'
        from bin/rails:3:in `<main>'

Это ясно говорит мне, что cd ~/my-app не работал должным образом. То есть, когда я делаю это в своей оболочке bash, я получаю сообщение, подобное этому:

alexis@my-vps:~ $ cd my-app/
RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
you can ignore these warnings with 'rvm rvmrc warning ignore /home/alexis/my-app/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.

alexis@my-vps:~/my-app $ _

, и я знаю, что это настраивает среду, так что мое приложение rails запускается, как и ожидалось (с правильной версией Rubyи другие инструменты).

Как мне повторить поведение команды cd в моем сценарии оболочки?

1 Ответ

1 голос
/ 07 ноября 2019

Когда я попробовал решение @ jvillian (см. Комментарий):

# force specific version of rvm
rvm use ruby-2.5.3@my-app

Я получил следующую ошибку:

RVM не является функцией, выбирая рубины с помощью 'rvm use...' не будет работать.

Вам нужно изменить настройки эмулятора терминала, чтобы разрешить регистрационную оболочку.
Иногда необходимо использовать /bin/bash --login в качестве команды.
Пожалуйста, посетите https://rvm.io/integration/gnome-terminal/ для примера.

Просматривая информацию по указанной ссылке, я понял, что идея заключалась в том, чтобы создать оболочку входа в систему, чтобы cd работал. Таким образом, я изменил свою первую строку сценария с:

#/bin/sh -e

на использование:

#/bin/bash -el

и теперь я вижу, что cd работает как положено.

Это, безусловно, связано с тем, что теперь скрипт загружает .bashrc и другие подобные файлы, которые добавляют надлежащую поддержку cd, как вы получаете по умолчанию в консоли.

Теперь все мои службы запускаются, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...