我有一个带有以下环境的Ruby-on-Rails(3.2)应用程序:
capistrano
,标准文件夹结构(my_app/current, /shared, /releases
)v2.3
从/usr/local/bin/ruby
的源代码安装。不使用rvm或rbenv my_app
级别安装在capistrano标准层次结构中my_app/shared/bundler
systemctl
问题:我使用的是diffy,它使用diff-lcs提供的ldiff
可执行文件。此可执行文件位于/home/my_user/my_app/shared/bundle/ruby/2.3.0/bin/ldiff
,它实际上是捆绑生成的存根。现在,当我放置这样的代码:Diffy::Diff.new('abcd', 'abcde').to_s
时,将执行存根并抛出以下错误:
/usr/local/lib/ruby/site_ruby/2.3.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem diff-lcs (>= 0.a) with executable ldiff (Gem::GemNotFoundException)
from /usr/local/lib/ruby/site_ruby/2.3.0/rubygems.rb:263:in `bin_path'
from /home/my_user/my_app/shared/bundle/ruby/2.3.0/bin/ldiff:24:in `<main>'
请注意,这适用于rails控制台,但不适用于服务器。看diffy.rb,我无法控制diffy执行的实际命令(我可以放bundle exec diffy ...
)。
如何解决这个问题?唯一的方法似乎是废除了已售出的宝石并在系统级安装所有宝石。
PS:我在使用[wkhtmltopdf][6]
时遇到了同样的问题,但是,我wkhtmltopdf
提供了使用本机包的配置设置。
答案 0 :(得分:0)
显然,乘客没有正确PATH
,只有ENV['PATH']
中的位置是bundler
/home/my_user/my_app/shared/bundle/ruby/2.3.0/bin
添加的位置。 Phusion passenger documentation也未明确说明此行为。通过在nginx.conf
:passenger_env_var PATH $PATH;
中包含此指令来解决此问题。这使现有路径传递给乘客流程。