次の環境の Ruby-on-Rails (3.2) アプリケーションがあります。
- 展開:
capistrano
、標準フォルダ構造 (my_app/current, /shared, /releases
) - Ruby:
v2.3
のソースからインストール/usr/local/bin/ruby
。rvm または rbenv を使用しない - Bundler: capistrano-bundler
my_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/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