Ruby - Twitter アプリで MultiJson ワーニング!

Updated:


自作の Twitter 関連の処理をする Ruby スクリプト。 当方のサーバ(CentOS 6.2)上や、Windows 上では特にワーニングは出力されなかったのですが、Cygwin 上で起動させてみると以下のようなワーニング出力されました。

Warning: multi_json is using default ok_json engine.
Suggested action: require and load an appropriate JSON library.

「適切な JSON ライブラリが見つからず、デフォルトの JSON エンジンを使用している」と言っているようです。 ※システムに導入されているパッケージのバージョンや Gem パッケージのバージョンの違いにより発生している模様。

別に Ruby スクリプト自体は正常に動作しているので、このまま放っておいてもいいのですが、やっぱり気になるので調べて対応しておきました。

対応記録

1.ライブラリのソースを確認

MultiJson ライブラリのソースを見てみます。 今回は Cygwin での作業なので、/usr/local/lib/ruby/gems/1.9.1/gems/multi_json-1.0.4/lib/multi_json.rb です。

  #### 途中省略 ####

  REQUIREMENT_MAP = [
    ["yajl", :yajl],
    ["json", :json_gem],
    ["json/pure", :json_pure]
  ]

  DEFAULT_ENGINE_WARNING = 'Warning: multi_json is using default ok_json engine. Suggested action: require and load an appropriate JSON library.'

  # The default engine based on what you currently
  # have loaded and installed. First checks to see
  # if any engines are already loaded, then checks
  # to see which are installed if none are loaded.
  def default_engine
    return :yajl if defined?(::Yajl)
    return :json_gem if defined?(::JSON)

    REQUIREMENT_MAP.each do |(library, engine)|
      begin
        require library
        return engine
      rescue LoadError
        next
      end
    end

    Kernel.warn DEFAULT_ENGINE_WARNING
    :ok_json
  end

  #### 途中省略 ####

このスクリプト内では、”yajl”, “json”, “json/pure” というライブラリを require しようとして LoadError ならワーニングを出力するようにしていることが分ります。

2.Gem パッケージ Yajl のインストール

自作の Twitter 操作用 Ruby スクリプトは動作しているので、”json” については無視してよいと判断し、Gem パッケージ “yajl” をインストールしてみます。 まず、”yajl” と付く Gem パッケージを検索。

$ gem search -r yajl

*** REMOTE GEMS ***

benofsky-yajl-ruby (0.7.7)
filipegiusti-yajl-ruby (0.6.4)
sprout-yajl-library (0.0.1)
yajl-ruby (1.1.0 ruby x86-mingw32 x86-mswin32-60)

ネットで色々調べてみると、”yajl-ruby” というの Gem パッケージをインストールすればよいらしい。

$ gem install yajl-ruby
Fetching: yajl-ruby-1.1.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed yajl-ruby-1.1.0
1 gem installed
Installing ri documentation for yajl-ruby-1.1.0...
Installing RDoc documentation for yajl-ruby-1.1.0...

3.確認

Gem パッケージ “yajl” をインストールしたところで、自作の Twitter 操作用 Ruby スクリプトを動かしてみます。 見事、ワーニング無しで正常に動作しました。


以上です。





 

Sponsored Link

 

Comments