2

Rails 2.3.6では、高速な新しい json ライブラリyajl-ruby "if available"の使用が開始されました。

yajl-ruby の readme の「JSON gem Compatibility API」セクションでは、yajl-ruby のインクルードをドロップするだけで、アプリの残りの部分がそれをシームレスに取得する方法を概説しています。

理想的には

  1. それを使用するレール
  2. それを使用する私の宝石
  3. それを使用するための私のアプリケーションコード

これを達成する最も簡単な方法は何ですか?私の推測:

config.gem 'yajl-ruby', :lib => 'yajl/json_gem'

environment.rb の最初の gem として。これを実行してもエラーは発生しませんが、Rails が独自の使用のためにそれを取得しているかどうかを知る方法がわかりません。

ありがとう!ジョン

4

1 に答える 1

8

yajl-rubyJSON gem 互換性 API の代わりに の API を直接使用することをお勧めします。これは主に、JSON gem のto_jsonメソッドが と競合しActiveSupport、それらを連携させる際に長年の問題があったためです。

代わりに行う場合は、オブジェクトを解析/エンコードするためにand を直接config.gem 'yajl-ruby', :lib => 'yajl'使用する必要があります。これの利点は、メソッドのオーバーライドとの競合がないことを確認できるため、JSON エンコード/解析コードが期待どおりに機能することが保証されることです。欠点は、JSON gem を使用する gem を使用している場合、それらは引き続き使用されますが、独自のコードでは yajl-ruby が使用されることです。Yajl::ParserYajl::Encoder

必要に応じて、 config.gem 行を使用してから、初期化子でrequire 'yajl'両方の API をロードすることができます。yajl/json_gemインクルードは、JSON gem を使用しているすべてのものをオーバーライドします-yajlこれを確実にオーバーライドするために、これらのメソッドrequire 'yajl/json_gem'が最後に行われるようにします。

Rails 3 を使用している場合は、これを初期化子に追加できます。

ActionController::Renderers.add :json do |json, options|
  json = Yajl.dump(json) unless json.respond_to?(:to_str)
  json = "#{options[:callback]}(#{json})" unless options[:callback].blank?
  self.content_type ||= Mime::JSON
  self.response_body  = json
end

render :json => ...通話を確認するためにも使用yajl-rubyします。

これがあなたの質問に本当に答えていない場合は申し訳ありませんが、少なくともyajl-rubyの API を直接使用することを提案したいと思います:)

于 2010-06-18T23:52:59.643 に答える