我有一台装有 nginx 和 Passenger 的服务器,用于运行 Ruby on Rails 应用。它使用 Bundler。
在这个堆栈的某个地方,$PATH
被设置为/var/www/APPNAME/shared/bundle/ruby/1.8/bin/
。这个目录确实包含可执行的 gem。
但我需要我的应用程序也能/usr/bin
在其 中提供$PATH
。更具体地说:我需要它能够运行idendtify
、convert
和mogrify
; 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 应用程序本身执行此操作,因为这才是您关心的。这是您可以控制的。