diffy无法使用vendored diff-lcs访问ldiff

问题描述 投票:0回答:1

我有一个Ruby-on-Rails(3.2)应用程序,具有以下环境:

  • 部署:capistrano,标准文件夹结构(my_app/current, /shared, /releases
  • Ruby:v2.3/usr/local/bin/ruby的源代码安装。不使用rvm或rbenv
  • Bundler:使用capistrano-bundler,安装在capistrano标准层次my_appmy_app/shared/bundler级别
  • 应用服务器:使用passenger-phusion with nginx,使用systemctl管理的启动

问题:我正在使用一个使用diffy提供的ldiff可执行文件的gem diff-lcs。此可执行文件位于/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提供了使用本机包的配置设置。

ruby-on-rails ruby bundler diff-lcs
1个回答
0
投票

显然,乘客没有得到正确的PATH,只有ENV['PATH']的位置是由bundler添加的:/home/my_user/my_app/shared/bundle/ruby/2.3.0/binPhusion passenger documentation也没有明确说明这种行为。通过在nginx.confpassenger_env_var PATH $PATH;中包含此指令来解决此问题。这使得现有路径被传递给乘客流程。

© www.soinside.com 2019 - 2024. All rights reserved.