Подтвердить что ты не робот

Запустите приложение Ruby, развернутое в комплекте, за пределами своего собственного каталога?

Я в процессе написания демона на основе Ruby, чтобы сидеть и работать на одном из моих серверов Ubuntu. Мне будет нужно, чтобы это запускалось при запуске, так что он будет писать для него файл стартовой работы. Тем не менее, я использовал диспетчер для управления различными драгоценными камнями, которые он использует, и намерен сделать это после его развертывания на сервере:

bundle install --deployment

Это ставит бункер в так называемый "режим развертывания", в котором устанавливаются различные параметры, и все драгоценные камни устанавливаются в каталог "поставщик", а не в общесистемный. Однако это создает проблему с запуском, в результате чего он должен выполняться из своего собственного каталога, так как в этом случае камни заканчиваются:

<in the app dir>
$ ./runmyapp
<it runs>

Если я cd в другое место, а затем попытайтесь запустить его, используя полный путь, он не работает:

<in another directory>
$ /path/to/runmyapp
<it crashes as it can't locate its gems>

Я прочитал много документации о комплектенике, и весь этот сценарий никогда не рассматривается? Должен ли я просто установить драгоценные камни в систему? Есть ли что-то еще, что я должен делать?

4b9b3361

Ответ 1

Вы используете диспетчер gem для своего приложения. Я думаю, что в этом случае использование bundle exec - лучший способ запуска исполняемых файлов.

Если вы запустите свое приложение из другого каталога, кроме каталога, содержащего Gemfile, вы должны установить местоположение Gemfile, установив BUNDLE_GEMFILE (см. bundle help exec). Следующее поможет вам:

BUNDLE_GEMFILE=/path/to/Gemfile bundle exec /path/to/runmyapp

Ответ 2

Решая подобную проблему самостоятельно, я в итоге создал скрипт-обертку,

#!/bin/bash
BUNDLE_GEMFILE="$(dirname $0)"/Gemfile bundle exec ruby "$(dirname $0)"/app.rb $*

Здесь app.rb находится "главная" точка входа приложения. Вы можете вызвать скрипт-обертку runmyapp или имя приложения или что-то еще.

Примечание: $0 устанавливается bash в расположение файла сценария оболочки, например, /home/foo/app/runmyapp или ./runmyapp

bundle exec "выполняет команду, делая все гемы, указанные в Gemfile, доступными для использования в программах Ruby". (документы)