我不认为这是个 Bug FormObject 不应该有必要解决这个只有靠 Transaction 才能防御住的问题。另外 Mutex 防线程不防进程啊。
上面说和 Unicorn 差不多嘛。。楼主先创建一个config/unicorn.rb
,然后把配置文件写进去,对于 Rainbow 特有的选项,放在Rainbows!
代码块里,应该是这个意思吧。反正我以前是这么用 Unicorn 的。。
楼主用法有错。。
This module adds Rainbows! to the Unicorn::Configurator Rainbows!-specific configuration options must be inside a the Rainbows! block, otherwise Unicorn::Configurator directives may be used anywhere in the file.
Rainbows! do
use :ThreadSpawn # concurrency model to use
worker_connections 400
keepalive_timeout 0 # zero disables keepalives entirely
client_max_body_size 5*1024*1024 # 5 megabytes
keepalive_requests 666 # default:100
client_header_buffer_size 2 * 1024 # 2 kilobytes
end
# the rest of the Unicorn configuration...
worker_processes 8
stderr_path "/path/to/error.log"
stdout_path "/path/to/output.log"
楼主仔细看下代码
module Rainbows::Configurator
# ...
# Configures \Rainbows! with a given concurrency model to +use+ and
# a +worker_connections+ upper-bound. This method should be called
# inside a Unicorn/\Rainbows! configuration file.
#
# All other methods in Rainbows::Configurator must be called
# inside this block.
def Rainbows!(&block)
block_given? or raise ArgumentError, "Rainbows! requires a block"
@block = true
instance_eval(&block)
ensure
@block = false
end
# ...
end
# :enddoc:
# inject the Rainbows! method into Unicorn::Configurator
Unicorn::Configurator.__send__(:include, Rainbows::Configurator)
可以看到Rainbows!
方法不是定义在 Rainbows::Configurator 上的 module 级方法,而是实例方法,所以肯定不是这么调用的。
不明白楼主的意思 楼主可以自己把代码在本机跑跑看,第二个 B-protected 确实是调用 protected_mth 方法的结果
买
很潮?我一直都被人感觉很土。。
楼主这是自问自答啊
本帖已被官方推号发现
有意思。。背景改的更漂亮下也许会更好
#3 楼 @billy 不对吧 按照这个说法 那如果我给password_confirmation
赋不同的值而根本没有被检查 验证也可以过啦?
[Development]>> user = User.create username: 'bachue'
D, [2014-06-24T00:10:49.823699 #31046] DEBUG -- : (0.1ms) begin transaction
D, [2014-06-24T00:10:49.836657 #31046] DEBUG -- : (0.1ms) rollback transaction
=> #<User id: nil, username: "bachue", password_digest: nil, created_at: nil, updated_at: nil>
[Development]>> user.password = 'bachue'
=> "bachue"
[Development]>> user.valid?
=> true
[Development]>> user.password_confirmation = 'b'
=> "b"
[Development]>> user.valid?
=> false
[Development]>> user.save
D, [2014-06-24T00:11:07.133127 #31046] DEBUG -- : (0.1ms) begin transaction
D, [2014-06-24T00:11:07.134311 #31046] DEBUG -- : (0.0ms) rollback transaction
=> false
看了下源码,在ConfirmationValidator
中,validate_each
的实现是这样的:
def validate_each(record, attribute, value)
if (confirmed = record.send("#{attribute}_confirmation")) && (value != confirmed)
human_attribute_name = record.class.human_attribute_name(attribute)
record.errors.add(:"#{attribute}_confirmation", :confirmation, options.merge(attribute: human_attribute_name))
end
end
注意,只有在password_confirmation
有值的时候才会验证是否一致,否则就直接 pass 了。
写的太好了
和以前有什么差异??
安装的时候提示安全警告。。
#18 楼 @yanguango 快速看下数据??你们有多少条数据竟然能被快速看下呀??另外修改感觉还是直接调 console 写 Ruby 代码来的愉快呢
#14 楼 @yanguango 看了一下宣传视频 感觉这样的产品也许更应该在编辑器部分上加强体验 良好的补全和提示 语法检查 性能优化建议 也许会更好的满足用户需求呢
只有命令行操作数据库的 PostgreSQL 命令行确实太难用了。但是作为 Ruby Developer,可以用 REPL 操作 ORM 来操作数据库啊
哎 我觉得楼主真幸福。。我们最核心的数据库是用 SQL 直接管理的 根本没有形成像 migration 这么好的机制 几乎不可能重新复刻一个干净的仅包含最基本数据的数据库
看看《HTTP 权威指南》就足够了吧