質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
rbenv

rbenvは、Rubyバージョン管理ツール。プロジェクトごとでRubyバージョンを切り替えることが可能です。RVMよりもシンプルで、少ない機能で動作します。本体にはRubyのビルド機能は備わっておらず、ruby-buildというツールを用いる必要があります。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Q&A

解決済

2回答

2192閲覧

rbenvでのRuby1.8.7環境でrequire "dbi"がno such file to loadになる

sokafuji

総合スコア16

rbenv

rbenvは、Rubyバージョン管理ツール。プロジェクトごとでRubyバージョンを切り替えることが可能です。RVMよりもシンプルで、少ない機能で動作します。本体にはRubyのビルド機能は備わっておらず、ruby-buildというツールを用いる必要があります。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

0グッド

0クリップ

投稿2020/03/16 06:37

編集2020/03/16 06:46

前提・実現したいこと

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

なにか勘違いをしているのだろうと思うのですが、取っ掛かりが掴めず解決できていません。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

1.8まではrubygemsが組み込みでないので、Gemsのライブラリを使うためには、まずrubygemsの読み込みが必要です。

Ruby

1require "rubygems" 2require "dbi"

としてください。

投稿2020/03/16 07:00

otn

総合スコア84553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sokafuji

2020/03/16 23:12

ありがとうございました。
guest

0

ベストアンサー

ruby1.8はrubygemsが標準添付されていませんので
require "rubygems"が必要です。

投稿2020/03/16 06:51

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asm

2020/03/16 06:58

対象コードに手を入れたくない場合は環境変数RUBY_OPTに -rubygems を入れるとよかったはず
sokafuji

2020/03/16 23:11

昨日2時間程悩んでいたのですが、ご指摘によりあっさり解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問