パーフェクトRubyの15章 gemパッケージのbuildがうまくいかない => 動いた

パーフェクトRubyの15章 gemパッケージのbuildがうまくいかない => 動いたパーフェクト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.gemspecspec.add_dependency "psych", "2.0.5"と追加してみました。するとbuildはできるようになったのですが、

warning: already initialized constant BigDecimal::BASE
.
.
.

とBigDecimal系のエラーがたくさん出ました。更にstackoverflowで調べて、

spec.add_dependency "bigdecimal", "1.1.0"

とすることで、とりあえず動くようになりました。gemのバージョンを下げて解決するというのはなんだかしっくりこないけれど、取りあえず動くようになって前に進めて嬉しい。nagachikaさんありがとうございました!

Pocket
LINEで送る

You may also like...

  • nagachika

    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

      nagachikaさん、ありがとうございました。教えていただいた内容を元に少し修正を加えた所、動かすことが出来ました。(まだ完全理解はしていませんが)。ブログ記事にも反映しています。ありがとうございました!