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 スクリプトを動かしてみます。 見事、ワーニング無しで正常に動作しました。
以上です。
Comments