Я в процессе написания демона на основе 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>
Я прочитал много документации по сборщикам, и весь этот сценарий даже не рассматривается? Должен ли я просто установить драгоценные камни в систему? Что мне еще нужно сделать?
Занятие подобной проблемой самостоятельно, я закончил тем, что создал сценарий обертки,
#!/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". ( документы )