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

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

bundle install --deployment

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

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

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

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

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

19
задан Andrew Grimm 31 July 2011 в 23:55
поделиться

1 ответ

Занятие подобной проблемой самостоятельно, я закончил тем, что создал сценарий обертки,

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

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

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

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

0
ответ дан 30 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: