我正试图在json中往返编码/解码普通字符串,但是我收到了一个错误.
在轨道2.3.w/ruby 1.8.6,它曾经工作过.
>> puts ActiveSupport::JSON.decode("abc".to_json)
abc
=> nil
Run Code Online (Sandbox Code Playgroud)
在rails 3.1beta1 w/ruby 1.9.2中,它会引发错误.
ruby-1.9.2-p180 :001 > puts ActiveSupport::JSON.decode("abc".to_json)
MultiJson::DecodeError: 706: unexpected token at '"abc"'
from /home/stevenh/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/json/common.rb:147:in `parse'
from /home/stevenh/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/json/common.rb:147:in `parse'
from /home/stevenh/.rvm/gems/ruby-1.9.2-p180/gems/multi_json-1.0.1/lib/multi_json/engines/json_gem.rb:13:in `decode'
[...]
Run Code Online (Sandbox Code Playgroud)
这与nil.to_json讨论的问题几乎相同,无法解析为nil?
但是nil曾经在2.3/1.8.7中工作过.
puts ActiveSupport::JSON.decode(nil.to_json)
nil
Run Code Online (Sandbox Code Playgroud)
这是新常态吗?
这是一个两部分问题,但可能有相同的答案.
第一部分:在我们的应用程序中,一个特定的控制器受到了很多打击- 以至于我们希望将它记录在与所有其他请求分开的文件中.设置FoosController.logger不是我正在寻找的,因为请求会运行一些具有其logger对象的lib文件和活动记录对象,rails会在将控制权交给相关控制器之前记录一些信息.
第二部分:我们在根application_controller.rb中包含了一个全局的前置过滤器,它在大多数控制器的大多数操作之前运行.这个before_filter在日志中非常冗长,并且是将所有日志信息发送到单独文件的候选者.此过滤器之前还会调用libs和ActiveRecord代码,并使用它们对记录器的引用.
一种可能的解决方案是将单个控制器作为自己的独立应用程序运行.我还没有尝试过,因为它与app的内部结合在一起.这种方法对before_filter也无济于事.
有没有什么好的解决方案可以在rails应用程序中进行更细粒度的日志记录?
谢谢!