在自己的目录之外运行一个Bundler部署的Ruby应用程序?

Mar*_*ing 19 ruby rubygems bundler

我正在编写一个基于Ruby的守护进程,以便在我的一个Ubuntu服务器上运行.我希望这能在启动时运行,因此将为它编写一个upstart作业文件.但是,我使用了bundler来管理它使用的各种gem,并打算在将它部署到服务器后执行此操作:

bundle install --deployment
Run Code Online (Sandbox Code Playgroud)

这将捆绑器置于所谓的"部署模式"中,从而设置了各种选项,并且所有宝石都安装在"供应商"目录中而不是系统范围内.然而,这会产生运行它的问题,因此必须从它自己的目录执行,因为这是宝石结束的地方:

<in the app's dir>
$ ./runmyapp
<it runs>
Run Code Online (Sandbox Code Playgroud)

如果我cd到另一个位置,然后尝试使用它的完整路径运行它,它会失败:

<in another directory>
$ /path/to/runmyapp
<it crashes as it can't locate its gems>
Run Code Online (Sandbox Code Playgroud)

我已阅读了大量的捆绑文档,这整个场景甚至从未被涵盖过?我应该将宝石安装到系统中吗?还有什么我应该做的吗?

pet*_*hka 35

您使用bundler作为应用程序的gem manager.我认为在这种情况下使用bundle exec是运行可执行文件的最佳方法.

如果从不同于包含Gemfile的目录的目录运行应用程序,则应通过设置BUNDLE_GEMFILE来设置Gemfile位置(请参阅参考资料bundle help exec).以下将帮助您:

BUNDLE_GEMFILE=/path/to/Gemfile bundle exec /path/to/runmyapp
Run Code Online (Sandbox Code Playgroud)