ruby Enumerable/Array first(n)和take(n)?之间有什么区别?
我模糊地回忆take起与懒惰评估有关,但我无法弄清楚如何使用它来做到这一点,并且找不到任何有用的谷歌搜索或在文档中."take"是google的硬方法名称.
first(n)和take(n)被记录的漂亮相同,没有太大的帮助.
first ? obj or nil
first(n) ? an_array
Returns the first element, or the first n elements, of the enumerable. If the enumerable is empty, the first form returns nil, and the second form returns an empty array.
Run Code Online (Sandbox Code Playgroud)
-
take(n) ? array
Returns first n elements from enum.
Run Code Online (Sandbox Code Playgroud)
告诉我"与懒惰的评价有关"是不够的,我有点记得已经,我需要一个如何使用它的例子,相比之下first.
因此,如果我的Rails应用程序中存在未捕获的异常,则会使用堆栈跟踪进行记录.
大.但我实际上想关闭"INFO"级别日志记录,并且只记录WARN/ERROR/FATAL.
这意味着,对于未被捕获的重复,我真的希望它能够更多地记录当前请求,而不仅仅是异常名称和堆栈跟踪.我想要请求参数,请求URI,我甚至想要请求客户端IP和用户代理.
我无法找到Rails的哪个部分进行自定义以获得此功能.无论是单独使用配置还是通过覆盖方法,甚至通过猴子修补 - 我都无法确定实际发生的位置.
是因为它在中间件中关闭了吗?呸! 无论哪种方式...任何关于实际执行此操作的最简单方法的提示?
(令人惊讶的是Rails不会让这很容易,不是吗?似乎并不是那么不寻常的事情?是不是因为每个人都在使用某些第三方平台来捕获这些东西而不是日志文件?我不是,嘿嘿.)
看起来Rails4的记录器与Rails3不同,它最终支持自定义格式化程序,就像ruby stdlib记录器一样.
Rails.logger.formatter # => #<ActiveSupport::Logger::SimpleFormatter:0x007ff81757d890 @datetime_format=nil>
Rails.logger.formatter = SomeFormatterClass
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试给它一个格式化程序类,这对于stdlib Logger格式化程序来说已经足够了:
[2014-03-12 16:23:27] ERROR NoMethodError: undefined method `tagged' for #<FormattedRailsLoggerFormatter:0x007fd816545ad8>
/Users/jrochkind/.gem/ruby/1.9.3/gems/activesupport-4.0.3/lib/active_support/tagged_logging.rb:67:in `tagged'
/Users/jrochkind/.gem/ruby/1.9.3/gems/railties-4.0.3/lib/rails/rack/logger.rb:20:in `call'
Run Code Online (Sandbox Code Playgroud)
有谁知道,自定义格式化程序实际上是Rails4支持的功能吗?您是如何在任何地方记录的?
因此很多人使用 Redis(通常通过 sidekiq)作为他们的 ActiveJob 队列。
Redis 也是用作ActiveSupport::Cache后端的一个很好的候选者。
但在我看来,对于这两种情况,您可能需要一些不同的 redis 配置。对于缓存使用,您可能希望将 Redis 配置为 LRU 缓存,当达到特定大小边界时自动驱逐最近较少使用的条目。
但是对于 ActiveJob 队列的使用,您当然不希望它以 LRU 方式删除排队的作业,重要的是 redis 永远不会自行“过期”任何内容。
我认为没有办法同时以这两种方式使用同一个 redis 实例。
那么...在 Rails 中实际使用两个Redis 实例是否很常见?或者还有另一种方法可以解决我所缺少的问题吗?或者 Redis 对于 ActiveSupport::Cache 后端实际上并不流行,人们是否使用其他东西?