私はRuby/JRubyを初めて使用し、特定のプロジェクトのRubyソースコードを直接実行しようとすると、「LoadError: no such file to load」というエラーに何週間も悩まされてきました。
多くの Ruby プロジェクトのソース コードを GitHub からダウンロードしました。はい、ソースコードのみです。私のタスクはコード自体の分析に重点が置かれているため、インストールしませんでした。
プロジェクト「rqrcode」が次の(簡略化された)構造を持っているとします。
- rqrコード
- lib(フォルダ)
- rqrcode (フォルダー)
- core_ext (フォルダー、内部にいくつかのファイル)
- core_ext.rb
- qrcode (フォルダ、内部にいくつかのファイル)
- qrcode.rb
- rqrcode.rb
- rqrcode (フォルダー)
- テスト (フォルダー)
- data.rb
- test_rqrcode.rb
- lib(フォルダ)
したがって、テスト フォルダー内で「jruby test_rqrcode.rb」を実行すると、ファイル内の次の行で LoadError がスローされます。
require_relative "../lib/rqrcode"
また、lib フォルダー内の rqrcode.rb ファイルで LoadError がスローされます。
require "rqrcode/core_ext"
エラーメッセージは
LoadError: no such file to load -- rqrcode/core_ext
require at org/jruby/RubyKernel.java:1054
require at /Users/x5lai/.rvm/rubies/jruby-1.7.4/lib/ruby/shared/rubygems/custom_require.rb:36
(root) at /Users/x5lai/Downloads/rqrcode-master/lib/rqrcode.rb:12
require at org/jruby/RubyKernel.java:1054
(root) at /Users/x5lai/.rvm/rubies/jruby-1.7.4/lib/ruby/shared/rubygems/custom_require.rb:1
require at /Users/x5lai/.rvm/rubies/jruby-1.7.4/lib/ruby/shared/rubygems/custom_require.rb:36
(root) at test_rqrcode.rb:12
「rqrcode/core_ext」が見つからないと言われる理由が本当にわかりません。なぜなら、そのフォルダーはそこに存在するからです!
このようなエラーは常に発生するとは限りません。上記と同様の構造を持つ他の Ruby プロジェクトのソース コードをダウンロードすると、すべての「require」、「require_relative」ステートメントで正常に実行されることがあります。
私の友人は、Ruby のデフォルトのロード パスの問題だと言っています。そのため、Ruby ロード パスの内部を調べてみました。多くのRubyファイルでいっぱいです。ただし、正常に実行される Ruby プロジェクトでは、これらのロード パスに Ruby ファイルもありません (また、コード内のロード パスを変更するために「.unshift」を使用しません)。ですから、これがプロジェクトの失敗の原因だとは思いません。
私の疑問を明確にしてくれる人がいることを願っています。私のJRuby設定が原因でしょうか?私はMacを使用しています。私のJRubyのバージョンは1.7.4です。