0

次の環境の Ruby-on-Rails (3.2) アプリケーションがあります。

  • 展開: capistrano、標準フォルダ構造 ( my_app/current, /shared, /releases)
  • Ruby:v2.3のソースからインストール/usr/local/bin/ruby。rvm または rbenv を使用しない
  • Bundler: capistrano-bundlermy_appを使用して、capistrano 標準階層のレベルにインストールmy_app/shared/bundler
  • アプリ サーバー: nginx でパッセンジャー プーシオンを使用し、起動は次のように管理されますsystemctl

問題: diff-lcsによって提供される実行可能ファイルを使用する gem diffyを使用しています。この実行可能ファイルは、実際にバンドラーによって生成されたスタブがある場所にあります。ここで、次のようなコードを配置すると: 、スタブが実行され、次のエラーがスローされます。ldiff/home/my_user/my_app/shared/bundle/ruby/2.3.0/bin/ldiffDiffy::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

4

1 に答える 1

0

Apparently, passenger wasn't getting PATH properly, only location in ENV['PATH'] was the one added by bundler: /home/my_user/my_app/shared/bundle/ruby/2.3.0/bin. Phusion passenger documentation also doesn't explicitly clarifies this behavior. Fixed this by including this directive in nginx.conf: passenger_env_var PATH $PATH;. This makes existing path to be passed to passenger processes.

于 2017-12-26T04:40:06.283 に答える