为 Passenger 或 nginx 定义额外的 `$PATH`

为 Passenger 或 nginx 定义额外的 `$PATH`

我有一台装有 nginx 和 Passenger 的服务器,用于运行 Ruby on Rails 应用。它使用 Bundler。

在这个堆栈的某个地方,$PATH被设置为/var/www/APPNAME/shared/bundle/ruby/1.8/bin/。这个目录确实包含可执行的 gem。

但我需要我的应用程序也能/usr/bin在其 中提供$PATH。更具体地说:我需要它能够运行idendtifyconvertmogrify; imagemagick 命令。

目前,我已经从以下位置对以下 imagemagick 二进制文件进行了符号链接/var/www/APPNAME/shared/bundle/ruby/1.8/bin/

ls /var/www/APPNAME/shared/bundle/ruby/1.8/bin/ -ahl
#...
lrwxrwxrwx 1 root root   16 May  8 16:22 convert -> /usr/bin/convert
-rwxr-xr-x 1 ber  root  379 Jan 11 08:58 erubis
#...

不过,这更像是一种快速破解,而不是真正的解决方案。

我如何分配额外的目录$PATH?我应该在哪里做?Passenger、nginx 还是 Rails 应用程序?

答案1

ruby 选项是实现此目的的好方法。指定 $LOAD_PATH 有 /usr/bin。

-Idirectory     specify $LOAD_PATH directory (may be used more than once)

毕竟,它的存在就是为了这个目的。

您可以做的另一件事是将目录推送到 $: 全局伪变量上。

$:.push("/usr/bin")

无论您在应用程序中进行了何种环境定制,它都适用。

我可能会对 Rails 应用程序本身执行此操作,因为这才是您关心的。这是您可以控制的。

相关内容