2017-12-11 5 views
0

でldiffにアクセスすることはできませんルビーオンレール(3.2)以下の環境でアプリケーション:diffyは、私が持っているvendored差分-LCS

  • 展開:capistrano、標準のフォルダ構造(my_app/current, /shared, /releases
  • ルビー:v2.3は、/usr/local/bin/rubyのソースからインストールされています。 RVMを使用するか、または
  • バンドラーをrbenvない:私は宝石diffyを使用していた:systemctl

号で管理スタートアップ、passenger-phusion with nginxを使用して:カピストラーノ標準階層my_app/shared/bundler

  • アプリケーションサーバーでmy_appレベルでインストール、capistrano-bundlerを使用して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>' 
    

    注これは、レールコンソールではなく、サーバーで動作していること。 diffy.rbを見ると、私は実際のコマンドがdiffyによって実行されていることを制御できません(どこにbundle exec diffy ...を置くことができます)。

    これを修正するにはどうすればよいですか?唯一の方法は、販売された宝石を取り除き、システムレベルですべての宝石をインストールするようです。

    PS:[wkhtmltopdf][6]を使用しているときに同じ問題が発生しましたが、I wkhtmltopdfではネイティブパッケージを使用するように設定されています。 /home/my_user/my_app/shared/bundle/ruby/2.3.0/bin

  • 答えて

    0

    どうやら、乗客が適切にPATHを取得していなかった、ENV['PATH']で唯一の場所はbundlerで追加されたものでした。 Phusion passenger documentationもこの動作を明示的に明確にしていません。このディレクティブをnginx.confpassenger_env_var PATH $PATH;に含めることでこれを修正しました。これにより、既存の経路が乗客のプロセスに渡されます。