【问题标题】:diffy can't access ldiff with vendored diff-lcsdiffy 无法使用 vendored diff-lcs 访问 ldiff
【发布时间】:2017-12-11 12:43:35
【问题描述】:

我有一个具有以下环境的 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_app/shared/bundler 中的 my_app 级别
  • 应用服务器:使用passenger-phusion with nginx,使用systemctl管理启动

问题:我正在使用 gem 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 ...)。

如何解决这个问题?唯一的方法似乎是取消供应商的 gem 并在系统级别安装所有 gem。

PS:我在使用 [wkhtmltopdf][6] 时遇到了同样的问题,但是,我 wkhtmltopdf 提供了使用原生包的配置设置。

【问题讨论】:

    标签: ruby-on-rails ruby bundler diff-lcs


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-07
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多