mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

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

[ プログラミング ] [ Cygwin, Ruby, Twitter ]

こんばんは。

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

1
2
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 です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  #### 途中省略 ####

  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 パッケージを検索。

1
2
3
4
5
6
7
8
$ 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 パッケージをインストールすればよいらしい。

1
2
3
4
5
6
7
$ gem install yajl-ruby
Fetching: yajl-ruby-1.1.0.gem (100%)
Building native extensions.  This could take a whileSuccessfully 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 スクリプトを動かしてみます。 見事、ワーニング無しで正常に動作しました。


以上です。

Comments