パーフェクトRubyの5章のgemパッケージを作っているのですが、buildしてgemにインストールして利用しようとすると下記のエラーが出て使えません(;;)。1年以上前の本なので実行環境などの影響だと思い、ネットを探したものの答えにたどり着けません。どなたかご存知のかた教えてください〜。
/Users/[user name]/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-3.2.0/lib/active_support/ordered_hash.rb:8:in `': undefined method `add_builtin_type' for Psych:Module (NoMethodError)
環境
- OS X 10.10.2
- Ruby 2.1.5p273
todo.gemspec
# coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'todo/version' Gem::Specification.new do |spec| spec.name = "todo" spec.version = Todo::VERSION spec.authors = ["[name]"] spec.email = ["[mail]"] spec.summary = %q{Todo management tool.} spec.description = %q{Todo management tool created by Perfect Ruby Team.} spec.homepage = "" spec.license = "MIT" spec.files = `git ls-files -z`.split("\x0") spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] spec.add_dependency "activerecord", "~> 3.2.0" spec.add_dependency "sqlite3", "~> 1.3.0" spec.add_development_dependency "bundler", "~> 1.8" spec.add_development_dependency "rake", "~> 10.3.0" spec.add_development_dependency "yard", "~> 0.8.7" spec.add_development_dependency "redcarpet", "~> 2.2" spec.add_development_dependency "pry" end
追記
解決策のヒントをもらい再度試してみました。
最終的には、spec-add_dependency
に下記の2行を追加することで解決しました。
spec.add_dependency "psych", "2.0.5" spec.add_dependency "bigdecimal", "1.1.0"
これが正しいやり方かわかりませんが。。。まず、nagachikaさんのおっしゃられていたように、psychのバージョンを調べてみると、
gem list psych psych (2.0.12, 2.0.5)
と2つありました。新しい方をuninstallして試してみたのですが、まだうまく行きません。
今度は、todo.gemspecにspec.add_dependency "psych", "2.0.5"
と追加してみました。するとbuildはできるようになったのですが、
warning: already initialized constant BigDecimal::BASE . . .
とBigDecimal系のエラーがたくさん出ました。更にstackoverflowで調べて、
spec.add_dependency "bigdecimal", "1.1.0"
とすることで、とりあえず動くようになりました。gemのバージョンを下げて解決するというのはなんだかしっくりこないけれど、取りあえず動くようになって前に進めて嬉しい。nagachikaさんありがとうございました!
2件のコメント
nagachika · 2015-02-15 7:17 AM
gem list psych としてみると ruby に添付されているバージョン(2.0.5)より新しいバージョンがインストールされていませんか?
似たような現象にみまわれたことがあり、rubygems 2.4.5 の不具合だそうです(既に master で修正されていて 2.4.6 のリリースで修正予定)。 https://twitter.com/nagachika/status/558126057535328256
新しいバージョンの psych を gem uninstall で削除するか、探索パスに拡張ライブラリ用のディレクトリを先にしてしまったという不具合だそうなので、require “psych.rb” を明示的にどこか最初のほう(他のライブラリから require されないうちに)挿入すると直るのではないかと思います。
morizotter · 2015-02-15 3:18 PM
nagachikaさん、ありがとうございました。教えていただいた内容を元に少し修正を加えた所、動かすことが出来ました。(まだ完全理解はしていませんが)。ブログ記事にも反映しています。ありがとうございました!