Запустить приложение Ruby, развернутое с помощью компоновщика, вне его собственного каталога? - PullRequest
19 голосов
/ 31 июля 2011

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

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>

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

1 Ответ

34 голосов
/ 31 июля 2011

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

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

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