小编gru*_*ler的帖子

Ruby的stdlib Logger类可以安全地处理来自多个进程的编写器吗?

我正在研究需要进行日志记录的Ruby库.理想情况下,我希望多个工作进程能够登录到同一个文件.Logger从Ruby的标准库查看该类的源代码,我看到我们正在努力将写入从多个线程同步到日志中(正如在Ruby的stdlib Logger类线程安全的答案中所指出的那样).

当多个进程写入同一个日志文件时似乎存在类似的问题:取决于底层如何决定缓冲/拆分写入,每个日志消息可能无法保持其完整性.

那么,是否有一种方法可以使用标准Logger类来允许多个进程安全地登录到单个文件?如果没有,这通常如何在Ruby项目中完成?

这就是'安全'的意思:

  1. 每个日志行都是"原子" - 在下一条消息开始之前不间断地完整显示.例如,没什么[1/1/2013 00:00:00] (PID N) LOGMESS[1/1/2013 00:00:01] (PID M) LOGMESSAGE2\nAGE1
  2. 只要日志中出现的时间戳正确,就不需要跨进程严格排序日志消息.

更新:

我决定接受Tin Man的建议并编写测试,你可以在这里找到:https: //gist.github.com/4370423

简短版本:Winfield是正确的,至少在默认情况下使用Logger它可以安全地同时使用多个进程(对于上面给出的'safe'的定义).

关键因素似乎是如果给定一个文件路径(而不是已经打开的IO对象),Logger将以模式打开文件WRONLY|APPEND,并sync=true在其上设置.这两件事的组合(至少在我对Mac OS X的测试中)似乎可以安全地从多个进程同时记录.如果要传入已打开的IO对象,请确保以相同的方式创建它.

ruby logging

13
推荐指数
1
解决办法
2262
查看次数

与MRI相比,mruby有哪些主要遗漏?

我对mruby项目非常感兴趣,但与其他更完整的Ruby实现(最重要的是,MRI)相比,我没有找到mruby中主要遗漏的摘要.

该项目中的README表示mruby实现了Ruby 的ISO标准的 "部分" ,但没有详细说明哪些功能被省略.

有没有人知道这些遗漏的清单,或者是否有人熟悉实施总结?

ruby mruby

11
推荐指数
1
解决办法
1870
查看次数

让MySQL显示用于特定列的编码

MySQL手册(http://dev.mysql.com/doc/refman/5.1/en/charset-syntax.html)说:

字符集和排序规则的默认设置分为四个级别:服务器,数据库,表和列.以下部分中的描述可能看起来很复杂,但实践中发现多级默认会导致自然而明显的结果.

我想查询一个特定的CHAR/VARCHAR/TEXT列,找出MySQL认为的编码方式.是否有捷径可寻?我知道我可以SHOW CREATE TABLE <table>用来查看表的默认字符集,但是我想在列级别上做同样的事情,因为文档表明它可能与表默认值不同.

mysql encoding

6
推荐指数
1
解决办法
6237
查看次数

Backbone.js:在set上运行验证和触发错误事件,但如果验证失败,则不要中止设置

我有一个Backbone模型,它带有一个自定义验证方法,可以验证模型属性之一的格式.我的模型连接到一个通过文本字段公开所述属性的视图.视图有一个"保存"按钮,用户必须明确按此按钮才能将模型更改保存回服务器.

当用户键入无效的属性值时,我想在视觉上将该字段标记为处于无效状态.到目前为止,简单 - 我可以将输入字段的change事件绑定到一个函数,该函数调用myModel.set({ attribute: value })并监听"error"模型上的事件以告知验证何时失败,我应该将输入标记为无效.

当我想要处理单击保存按钮时出现问题.因为Backbone.Model.set如果验证失败,中止实际上在模型上设置属性,我的模型将不会准确反映用户输入的值,除非该值有效.当用户在键入无效值后单击"保存"时,我会检查模型是否有效,发现它是否(因为实际上从未设置过无效属性),并将旧的(有效)属性值保存到服务器.

我想要的是一个版本,set它始终发出请求的更改,但仍然会触发验证和事件.set(..., { silent: true })将允许更改通过,但不会运行验证或触发事件.

简而言之 - 我希望我的模型有时存在于无效状态(如果用户输入了无效的属性值),并且我希望能够在有效和无效之间转换时获取事件.是否有一种优雅的方式与骨干做这件事,或者我是否认为这完全错了?

validation backbone.js

3
推荐指数
1
解决办法
2630
查看次数

标签 统计

ruby ×2

backbone.js ×1

encoding ×1

logging ×1

mruby ×1

mysql ×1

validation ×1