前提・実現したいこと
Debian GNU/Linux 10.2.0(amd64)で、古いRuby(1.8.7)で書かれたコードを動かそうとしています。
対象のコードを見ると先頭で以下のライブラリをrequireしているので、rbenvを使ってRuby 1.8.7の環境を作り、gemを使ってdbiをセットアップしようと思います。
require "dbi"
require "csv"
require "fileutils"
require "pp"
require 'thread'
require 'syslog'
require "kconv"
require 'net/ftp'
require 'nkf'
発生している問題・エラーメッセージ
Ruby1.8.7の環境を作るために、aptで以下のパッケージをインストールしました。
rbenvr
subversion
autoconf
bison
作業用ディレクトリで、以下のようにしました。
$ rbenv -v rbenv 1.1.1 $ rbenv install 1.8.7-p375 $ rbenv local 1.8.7-p375 $ ruby -v ruby 1.8.7 (2013-12-22 patchlevel 375) [x86_64-linux] $ gem -v 1.6.2 $ gem install pg -v "0.17.1" $ gem install dbd-pg -v "0.3.9" $ gem list *** LOCAL GEMS *** dbd-pg (0.3.9) dbi (0.4.5) deprecated (2.0.1) pg (0.17.1)
この状態でコードを実行すると、次のようなエラーがでます。
$ruby ./test1.rb ./test1.rb:1:in `require': no such file to load -- dbi (LoadError) from ./test1.rb:1
dbiが無いというエラーと思いますが、エラーの理由及び回避方法がわかりません。
該当のソースコード
問題を単純化するため、以下のようなコードでテストしました。
Ruby
1require "dbi" 2 3dbh = DBI.connect( sprintf( "DBI:Pg:database=%s;host=%s;port=%s", $SqlDbName, $SqlAddress, $SqlPort), $SqlUserName, $SqlPassword) 4 5dbh.do("INSERT INTO test VALUES ('test1','test2')") 6 7dbh.commit 8 9dbh.disconnect
試したこと
gemの環境を確認しました。
$ gem env RubyGems Environment: - RUBYGEMS VERSION: 1.6.2 - RUBY VERSION: 1.8.7 (2013-12-22 patchlevel 375) [x86_64-linux] - INSTALLATION DIRECTORY: /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8 - RUBY EXECUTABLE: /home/hoge/.rbenv/versions/1.8.7-p375/bin/ruby - EXECUTABLE DIRECTORY: /home/hoge/.rbenv/versions/1.8.7-p375/bin - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8 - /home/hoge/.gem/ruby/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://rubygems.org/
dbiのgemがインストールされていることを確認しました。
$ find .rbenv/ -name dbi* .rbenv/versions/1.8.7-p375/bin/dbi .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/dbi-0.4.5 .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/dbi-0.4.5/test/dbi .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/dbi-0.4.5/bin/dbi .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/specifications/dbi-0.4.5.gemspec .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/doc/dbi-0.4.5 .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/doc/dbi-0.4.5/rdoc/files/lib/dbi .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/doc/dbi-0.4.5/rdoc/files/lib/dbi_rb.html .rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/cache/dbi-0.4.5.gem
実行時に検索パスを表示してみました。
.rbenv/versions/1.8.7-p375/lib/ruby/gems/ が含まれていない?
puts $LOAD_PATH /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/site_ruby/1.8 /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/site_ruby/1.8/x86_64-linux /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/site_ruby /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/vendor_ruby/1.8 /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/vendor_ruby/1.8/x86_64-linux /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/vendor_ruby /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/1.8 /home/hoge/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/x86_64-linux
パスを追加してみました。
$ ruby -I ~/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/dbi-0.4.5/ ./test1.rb ./test1.rb:1:in `require': no such file to load -- dbi (LoadError) from ./test1.rb:1 $ ruby -I ~/.rbenv/versions/1.8.7-p375/bin/ ./test1.rb ./test1.rb:1:in `require': no such file to load -- dbi (LoadError) from ./test1.rb:1
なにか勘違いをしているのだろうと思うのですが、取っ掛かりが掴めず解決できていません。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/16 23:12